//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // template // struct array // Test the size and alignment matches that of an array of a given type. // Ignore error about requesting a large alignment not being ABI compatible with older AIX systems. #if defined(_AIX) # pragma clang diagnostic ignored "-Waix-compat" #endif #include #include #include #include #include "test_macros.h" template struct MyArray { T elems[Size]; }; template void test() { typedef T CArrayT[Size == 0 ? 1 : Size]; typedef std::array ArrayT; typedef MyArray MyArrayT; static_assert(sizeof(ArrayT) == sizeof(CArrayT), ""); static_assert(sizeof(ArrayT) == sizeof(MyArrayT), ""); static_assert(TEST_ALIGNOF(ArrayT) == TEST_ALIGNOF(MyArrayT), ""); } template void test_type() { test(); test(); test(); } #if TEST_STD_VER >= 11 struct alignas(alignof(std::max_align_t) * 2) TestType1 { }; struct alignas(alignof(std::max_align_t) * 2) TestType2 { char data[1000]; }; struct alignas(alignof(std::max_align_t)) TestType3 { char data[1000]; }; #endif int main(int, char**) { test_type(); test_type(); test_type(); test_type(); #if TEST_STD_VER >= 11 test_type(); test_type(); test_type(); test_type(); #endif return 0; }