//===----------------------------------------------------------------------===// // // 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. #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), ""); #if defined(_LIBCPP_VERSION) ArrayT a; ((void)a); static_assert(sizeof(ArrayT) == sizeof(a.__elems_), ""); static_assert(TEST_ALIGNOF(ArrayT) == __alignof__(a.__elems_), ""); #endif } template void test_type() { test(); test(); test(); } struct TEST_ALIGNAS(TEST_ALIGNOF(std::max_align_t) * 2) TestType1 { }; struct TEST_ALIGNAS(TEST_ALIGNOF(std::max_align_t) * 2) TestType2 { char data[1000]; }; //static_assert(sizeof(void*) == 4, ""); int main(int, char**) { test_type(); test_type(); test_type(); test_type(); test_type(); test_type(); test_type(); return 0; }