//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // type_traits // alignment_of #include #include #include "test_macros.h" template void test_alignment_of() { const unsigned AlignofResult = TEST_ALIGNOF(T); static_assert( AlignofResult == A, "Golden value does not match result of alignof keyword"); static_assert( std::alignment_of::value == AlignofResult, ""); static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); #if TEST_STD_VER > 14 static_assert( std::alignment_of_v == A, ""); static_assert( std::alignment_of_v == A, ""); static_assert( std::alignment_of_v == A, ""); static_assert( std::alignment_of_v == A, ""); #endif } class Class { public: ~Class(); }; int main(int, char**) { test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); // The test case below is a hack. It's hard to detect what golden value // we should expect. In most cases it should be 8. But in i386 builds // with Clang >= 8 or GCC >= 8 the value is '4'. test_alignment_of(); #if (defined(__ppc__) && !defined(__ppc64__)) test_alignment_of(); // 32-bit PPC has four byte bool #else test_alignment_of(); #endif test_alignment_of(); return 0; }