xref: /aosp_15_r20/external/libcxxabi/test/exception_object_alignment.pass.cpp (revision c05d8e5dc3e10f6ce4317e8bc22cc4a25f55fa94)
1*c05d8e5dSAndroid Build Coastguard Worker //===---------------- exception_object_alignment.pass.cpp -----------------===//
2*c05d8e5dSAndroid Build Coastguard Worker //
3*c05d8e5dSAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*c05d8e5dSAndroid Build Coastguard Worker //
5*c05d8e5dSAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open
6*c05d8e5dSAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details.
7*c05d8e5dSAndroid Build Coastguard Worker //
8*c05d8e5dSAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*c05d8e5dSAndroid Build Coastguard Worker 
10*c05d8e5dSAndroid Build Coastguard Worker // UNSUPPORTED: libcxxabi-no-exceptions
11*c05d8e5dSAndroid Build Coastguard Worker 
12*c05d8e5dSAndroid Build Coastguard Worker // Check that the pointer __cxa_allocate_exception returns is aligned to the
13*c05d8e5dSAndroid Build Coastguard Worker // default alignment for the target architecture.
14*c05d8e5dSAndroid Build Coastguard Worker 
15*c05d8e5dSAndroid Build Coastguard Worker #include <cassert>
16*c05d8e5dSAndroid Build Coastguard Worker #include <cstdint>
17*c05d8e5dSAndroid Build Coastguard Worker #include <cxxabi.h>
18*c05d8e5dSAndroid Build Coastguard Worker #include <type_traits>
19*c05d8e5dSAndroid Build Coastguard Worker #include <__cxxabi_config.h>
20*c05d8e5dSAndroid Build Coastguard Worker 
21*c05d8e5dSAndroid Build Coastguard Worker struct S {
22*c05d8e5dSAndroid Build Coastguard Worker   int a[4];
23*c05d8e5dSAndroid Build Coastguard Worker } __attribute__((aligned));
24*c05d8e5dSAndroid Build Coastguard Worker 
main()25*c05d8e5dSAndroid Build Coastguard Worker int main() {
26*c05d8e5dSAndroid Build Coastguard Worker #if !defined(_LIBCXXABI_ARM_EHABI)
27*c05d8e5dSAndroid Build Coastguard Worker   void *p = __cxxabiv1::__cxa_allocate_exception(16);
28*c05d8e5dSAndroid Build Coastguard Worker   auto i = reinterpret_cast<uintptr_t>(p);
29*c05d8e5dSAndroid Build Coastguard Worker   auto a = std::alignment_of<S>::value;
30*c05d8e5dSAndroid Build Coastguard Worker   assert(i % a == 0);
31*c05d8e5dSAndroid Build Coastguard Worker   __cxxabiv1::__cxa_free_exception(p);
32*c05d8e5dSAndroid Build Coastguard Worker #endif
33*c05d8e5dSAndroid Build Coastguard Worker   return 0;
34*c05d8e5dSAndroid Build Coastguard Worker }
35