libcxxabi

libcxxabi mirror with random patches
git clone https://git.neptards.moe/neptards/libcxxabi.git
Log | Files | Refs

exception_object_alignment.pass.cpp (956B)


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