10e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -std=c++11 -verify %s 20e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-no-diagnostics 30e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 40e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct true_type { 50e2c34f92f00628d48968dfea096d36381f494cbStephen Hines static constexpr const bool value = true; 60e2c34f92f00628d48968dfea096d36381f494cbStephen Hines}; 70e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 80e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct false_type { 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines static constexpr const bool value = false; 100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines}; 110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 120e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <class _Tp, class _Up> struct is_same : public false_type {}; 130e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <class _Tp> struct is_same<_Tp, _Tp> : public true_type {}; 140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// Check that our 'is_same' works. 160e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<char, char>::value, "is_same is broken"); 170e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(!is_same<char, char *>::value, "is_same is broken"); 180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 190e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <class _Tp, unsigned _AlignOf, unsigned _SizeOf> 200e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct check_type { 210e2c34f92f00628d48968dfea096d36381f494cbStephen Hines static constexpr const bool value = 220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf); 230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines}; 240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// Fundamental types 270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 290e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<bool, 1, 1>::value, "bool is wrong"); 300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 310e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<char, 1, 1>::value, "char is wrong"); 320e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<signed char, 1, 1>::value, "signed char is wrong"); 330e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong"); 340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 350e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong"); 360e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong"); 370e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong"); 380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 390e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<short, 2, 2>::value, "short is wrong"); 400e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong"); 410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 420e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<int, 4, 4>::value, "int is wrong"); 430e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong"); 440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 450e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<long, 8, 8>::value, "long is wrong"); 460e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<unsigned long, 8, 8>::value, "unsigned long is wrong"); 470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 480e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<long long, 8, 8>::value, "long long is wrong"); 490e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong"); 500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 510e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<float, 4, 4>::value, "float is wrong"); 520e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<double, 8, 8>::value, "double is wrong"); 530e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<long double, 8, 8>::value, "long double is wrong"); 540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 550e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<void *, 8, 8>::value, "'void *' is wrong"); 560e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<int (*)(int), 8, 8>::value, "function pointer is wrong"); 570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// stdarg.h 600e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 620e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#include <stdarg.h> 630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 640e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(check_type<va_list, 8, 8>::value, "va_list is wrong"); 650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// stddef.h 680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines//===----------------------------------------------------------------------===// 690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define __STDC_WANT_LIB_EXT1__ 1 710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#include <stddef.h> 720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 730e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<long int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong"); 740e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong"); 750e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong"); 760e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong"); 770e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong"); 780e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define __need_wint_t 800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#include <stddef.h> 810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 820e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong"); 830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 84