1*eb8650a7SLouis Dionne //===----------------------------------------------------------------------===// 20c1016a3SAkira Hatanaka // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60c1016a3SAkira Hatanaka // 70c1016a3SAkira Hatanaka //===----------------------------------------------------------------------===// 80c1016a3SAkira Hatanaka 98c61114cSLouis Dionne // UNSUPPORTED: no-exceptions 100c1016a3SAkira Hatanaka 110c1016a3SAkira Hatanaka // Check that the pointer __cxa_allocate_exception returns is aligned to the 120c1016a3SAkira Hatanaka // default alignment for the target architecture. 130c1016a3SAkira Hatanaka 140c1016a3SAkira Hatanaka #include <cassert> 150c1016a3SAkira Hatanaka #include <cstdint> 160c1016a3SAkira Hatanaka #include <cxxabi.h> 170c1016a3SAkira Hatanaka #include <type_traits> 180c1016a3SAkira Hatanaka #include <__cxxabi_config.h> 190c1016a3SAkira Hatanaka 200c1016a3SAkira Hatanaka struct S { 210c1016a3SAkira Hatanaka int a[4]; 220c1016a3SAkira Hatanaka } __attribute__((aligned)); 230c1016a3SAkira Hatanaka main(int,char **)24504bc07dSLouis Dionneint main(int, char**) { 250c1016a3SAkira Hatanaka #if !defined(_LIBCXXABI_ARM_EHABI) 260c1016a3SAkira Hatanaka void *p = __cxxabiv1::__cxa_allocate_exception(16); 270c1016a3SAkira Hatanaka auto i = reinterpret_cast<uintptr_t>(p); 280c1016a3SAkira Hatanaka auto a = std::alignment_of<S>::value; 290c1016a3SAkira Hatanaka assert(i % a == 0); 307d5d9dc1SAkira Hatanaka __cxxabiv1::__cxa_free_exception(p); 310c1016a3SAkira Hatanaka #endif 320c1016a3SAkira Hatanaka return 0; 330c1016a3SAkira Hatanaka } 34