//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// UNSUPPORTED: libcxxabi-no-exceptions

// This test checks that the compiler does not make incorrect assumptions
// about the alignment of the exception (only in that specific case, of
// course).
//
// There was a bug where Clang would emit a call to memset assuming a 16-byte
// aligned exception even when back-deploying to older Darwin systems where
// exceptions are 8-byte aligned, which caused a segfault on those systems.

struct exception {
    exception() : x(0) { }
    virtual ~exception() { }
    int x;
};

struct foo : exception { };

int main() {
    try {
      throw foo();
    } catch (...) {

    }
    return 0;
}

Add a test for invalid assumptions on the alignment of exceptions
[libcxxabi] Add a test for invalid assumptions on the alignment of exceptions

rdar://problem/49864414

git-svn-id: 6a9f6578bdee8d959f0ed58970538b4ab6004734@361039 91177308-0d34-0410-b5e6-96231b3b80d8
