1// RUN: %clang_cc1 -triple thumbv7-apple-ios7.0 -target-abi apcs-gnu -std=c++11 -verify %s 2// expected-no-diagnostics 3 4struct true_type { 5 static constexpr const bool value = true; 6}; 7 8struct false_type { 9 static constexpr const bool value = false; 10}; 11 12template <class _Tp, class _Up> struct is_same : public false_type {}; 13template <class _Tp> struct is_same<_Tp, _Tp> : public true_type {}; 14 15// Check that our 'is_same' works. 16static_assert(is_same<char, char>::value, "is_same is broken"); 17static_assert(!is_same<char, char *>::value, "is_same is broken"); 18 19template <class _Tp, unsigned _AlignOf, unsigned _SizeOf> 20struct check_type { 21 static constexpr const bool value = 22 (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf); 23}; 24 25//===----------------------------------------------------------------------===// 26// Fundamental types 27//===----------------------------------------------------------------------===// 28 29static_assert(check_type<bool, 1, 1>::value, "bool is wrong"); 30 31static_assert(check_type<char, 1, 1>::value, "char is wrong"); 32static_assert(check_type<signed char, 1, 1>::value, "signed char is wrong"); 33static_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong"); 34 35static_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong"); 36static_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong"); 37static_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong"); 38 39static_assert(check_type<short, 2, 2>::value, "short is wrong"); 40static_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong"); 41 42static_assert(check_type<int, 4, 4>::value, "int is wrong"); 43static_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong"); 44 45static_assert(check_type<long, 4, 4>::value, "long is wrong"); 46static_assert(check_type<unsigned long, 4, 4>::value, "unsigned long is wrong"); 47 48static_assert(check_type<long long, 8, 8>::value, "long long is wrong"); 49static_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong"); 50 51static_assert(check_type<float, 4, 4>::value, "float is wrong"); 52static_assert(check_type<double, 8, 8>::value, "double is wrong"); 53static_assert(check_type<long double, 4, 8>::value, "long double is wrong"); 54 55static_assert(check_type<void *, 4, 4>::value, "'void *' is wrong"); 56static_assert(check_type<int (*)(int), 4, 4>::value, "function pointer is wrong"); 57 58//===----------------------------------------------------------------------===// 59// stdarg.h 60//===----------------------------------------------------------------------===// 61 62#include <stdarg.h> 63 64static_assert(check_type<va_list, 4, 4>::value, "va_list is wrong"); 65 66//===----------------------------------------------------------------------===// 67// stddef.h 68//===----------------------------------------------------------------------===// 69 70#define __STDC_WANT_LIB_EXT1__ 1 71#include <stddef.h> 72 73static_assert(is_same<int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong"); 74static_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong"); 75static_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong"); 76static_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong"); 77static_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong"); 78 79#define __need_wint_t 80#include <stddef.h> 81 82static_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong"); 83 84