]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/type_traits/test/type_with_alignment_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / type_traits / test / type_with_alignment_test.cpp
CommitLineData
7c673cae
FG
1
2// (C) Copyright John Maddock 2000.
3// Use, modification and distribution are subject to the
4// Boost Software License, Version 1.0. (See accompanying file
5// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7c673cae
FG
7#ifdef TEST_STD
8# include <type_traits>
9#else
10# include <boost/type_traits/alignment_of.hpp>
11# include <boost/type_traits/type_with_alignment.hpp>
12# include <boost/type_traits/is_pod.hpp>
13#endif
11fdf7f2
TL
14#include "test.hpp"
15#include "check_integral_constant.hpp"
7c673cae
FG
16
17#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
18#if (_MSC_VER >= 1400) && defined(_M_IX86)
19#include <xmmintrin.h>
20#endif
21struct __declspec(align(8)) a8 { char m[8]; };
22struct __declspec(align(16)) a16 { char m[16]; };
23struct __declspec(align(32)) a32 { char m[32]; };
24struct __declspec(align(64)) a64 { char m[64]; };
25struct __declspec(align(128)) a128 { char m[128]; };
26#endif
27
92f5a8d4
TL
28#ifdef __CLR_VER
29#pragma warning(disable:4793) // vaarg function
30#endif
31
7c673cae
FG
32void check_call2(...){}
33
34template <class T>
35void check_call(const T& v)
36{
37 check_call2(v);
38}
39
40#define TYPE_WITH_ALIGNMENT_TEST(T)\
41{\
42std::cout << "\ntesting type " << typeid(T).name() << std::endl;\
43std::cout << "Alignment of T is " << ::tt::alignment_of< T >::value << std::endl;\
44std::cout << "Aligned type is " << typeid(::tt::type_with_alignment< ::tt::alignment_of< T >::value>::type).name() << std::endl;\
45std::cout << "Alignment of aligned type is " << ::tt::alignment_of<\
46 ::tt::type_with_alignment<\
47 ::tt::alignment_of< T >::value\
48 >::type\
49>::value << std::endl;\
50BOOST_CHECK(::tt::alignment_of<\
51 ::tt::type_with_alignment<\
52 ::tt::alignment_of< T >::value\
53 >::type\
54 >::value == ::boost::alignment_of< T >::value);\
55BOOST_CHECK(::tt::is_pod<\
56 ::tt::type_with_alignment<\
57 ::tt::alignment_of< T >::value>::type\
58 >::value);\
59}
60#define TYPE_WITH_ALIGNMENT_TEST_EX(T)\
61 TYPE_WITH_ALIGNMENT_TEST(T)\
62{\
63 ::tt::type_with_alignment<\
64 ::tt::alignment_of< T >::value\
65 >::type val;\
66 check_call(val);\
67}
68
69
70TT_TEST_BEGIN(type_with_alignment)
71
72TYPE_WITH_ALIGNMENT_TEST_EX(char)
73TYPE_WITH_ALIGNMENT_TEST_EX(short)
74TYPE_WITH_ALIGNMENT_TEST_EX(int)
75TYPE_WITH_ALIGNMENT_TEST_EX(long)
76TYPE_WITH_ALIGNMENT_TEST_EX(float)
77TYPE_WITH_ALIGNMENT_TEST_EX(double)
78TYPE_WITH_ALIGNMENT_TEST_EX(long double)
79
80#ifdef BOOST_HAS_LONG_LONG
81TYPE_WITH_ALIGNMENT_TEST_EX(::boost::long_long_type)
82#endif
83#ifdef BOOST_HAS_MS_INT64
84TYPE_WITH_ALIGNMENT_TEST_EX(__int64)
85#endif
86TYPE_WITH_ALIGNMENT_TEST_EX(int[4])
87TYPE_WITH_ALIGNMENT_TEST_EX(int(*)(int))
88TYPE_WITH_ALIGNMENT_TEST_EX(int*)
89TYPE_WITH_ALIGNMENT_TEST_EX(VB)
90TYPE_WITH_ALIGNMENT_TEST_EX(VD)
91TYPE_WITH_ALIGNMENT_TEST_EX(enum_UDT)
92TYPE_WITH_ALIGNMENT_TEST_EX(mf2)
93TYPE_WITH_ALIGNMENT_TEST_EX(POD_UDT)
94TYPE_WITH_ALIGNMENT_TEST_EX(empty_UDT)
95TYPE_WITH_ALIGNMENT_TEST_EX(union_UDT)
96
97#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
98#if (_MSC_VER >= 1400) && defined(_M_IX86)
99TYPE_WITH_ALIGNMENT_TEST(__m128)
100TYPE_WITH_ALIGNMENT_TEST(__m64)
101#endif
102TYPE_WITH_ALIGNMENT_TEST(a8)
103TYPE_WITH_ALIGNMENT_TEST(a16)
104TYPE_WITH_ALIGNMENT_TEST(a32)
105#endif
106
107TT_TEST_END
108
109
110
111
112
113
114
115
116