diff options
Diffstat (limited to 'test/Headers')
-rw-r--r-- | test/Headers/Inputs/include/stdlib.h | 2 | ||||
-rw-r--r-- | test/Headers/altivec-header.c | 14 | ||||
-rw-r--r-- | test/Headers/altivec-intrin.c | 4 | ||||
-rw-r--r-- | test/Headers/arm64-apple-ios-types.cpp | 83 | ||||
-rw-r--r-- | test/Headers/thumbv7-apple-ios-types.cpp | 83 | ||||
-rw-r--r-- | test/Headers/x86_64-apple-macosx-types.cpp | 83 | ||||
-rw-r--r-- | test/Headers/xmmintrin.c | 12 |
7 files changed, 270 insertions, 11 deletions
diff --git a/test/Headers/Inputs/include/stdlib.h b/test/Headers/Inputs/include/stdlib.h new file mode 100644 index 0000000..296b623 --- /dev/null +++ b/test/Headers/Inputs/include/stdlib.h @@ -0,0 +1,2 @@ +#pragma once +typedef __SIZE_TYPE__ size_t; diff --git a/test/Headers/altivec-header.c b/test/Headers/altivec-header.c index 7b6c516..0ea9e2b 100644 --- a/test/Headers/altivec-header.c +++ b/test/Headers/altivec-header.c @@ -1,16 +1,12 @@ -// REQUIRES: powerpc-registered-target -// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -S -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -fno-lax-vector-conversions -S -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -x c++ -S -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -emit-llvm -fno-lax-vector-conversions -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -faltivec -ffreestanding -emit-llvm -x c++ -o - %s | FileCheck %s #include <altivec.h> // Verify that simply including <altivec.h> does not generate any code // (i.e. all inline routines in the header are marked "static") -// CHECK: .text -// CHECK-NEXT: .file +// CHECK: target triple = "powerpc64- // CHECK-NEXT: {{^$}} -// CHECK-NEXT: .ident{{.*$}} -// CHECK-NEXT: .section ".note.GNU-stack","",@progbits -// CHECK-NOT: . +// CHECK-NEXT: llvm.ident diff --git a/test/Headers/altivec-intrin.c b/test/Headers/altivec-intrin.c index a4de7e7..1577d7e 100644 --- a/test/Headers/altivec-intrin.c +++ b/test/Headers/altivec-intrin.c @@ -14,5 +14,5 @@ int main() } // FIXME: As noted in ms-intrin.cpp, it would be nice if we didn't have to // hard-code the line number from altivec.h here. -// expected-note@altivec.h:2389 {{deprecated here}} -// expected-note@altivec.h:2524 {{deprecated here}} +// expected-note@altivec.h:2514 {{deprecated here}} +// expected-note@altivec.h:2649 {{deprecated here}} diff --git a/test/Headers/arm64-apple-ios-types.cpp b/test/Headers/arm64-apple-ios-types.cpp new file mode 100644 index 0000000..7e7bc8b --- /dev/null +++ b/test/Headers/arm64-apple-ios-types.cpp @@ -0,0 +1,83 @@ +// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -std=c++11 -verify %s +// expected-no-diagnostics + +struct true_type { + static constexpr const bool value = true; +}; + +struct false_type { + static constexpr const bool value = false; +}; + +template <class _Tp, class _Up> struct is_same : public false_type {}; +template <class _Tp> struct is_same<_Tp, _Tp> : public true_type {}; + +// Check that our 'is_same' works. +static_assert(is_same<char, char>::value, "is_same is broken"); +static_assert(!is_same<char, char *>::value, "is_same is broken"); + +template <class _Tp, unsigned _AlignOf, unsigned _SizeOf> +struct check_type { + static constexpr const bool value = + (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf); +}; + +//===----------------------------------------------------------------------===// +// Fundamental types +//===----------------------------------------------------------------------===// + +static_assert(check_type<bool, 1, 1>::value, "bool is wrong"); + +static_assert(check_type<char, 1, 1>::value, "char is wrong"); +static_assert(check_type<signed char, 1, 1>::value, "signed char is wrong"); +static_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong"); + +static_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong"); +static_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong"); +static_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong"); + +static_assert(check_type<short, 2, 2>::value, "short is wrong"); +static_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong"); + +static_assert(check_type<int, 4, 4>::value, "int is wrong"); +static_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong"); + +static_assert(check_type<long, 8, 8>::value, "long is wrong"); +static_assert(check_type<unsigned long, 8, 8>::value, "unsigned long is wrong"); + +static_assert(check_type<long long, 8, 8>::value, "long long is wrong"); +static_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong"); + +static_assert(check_type<float, 4, 4>::value, "float is wrong"); +static_assert(check_type<double, 8, 8>::value, "double is wrong"); +static_assert(check_type<long double, 8, 8>::value, "long double is wrong"); + +static_assert(check_type<void *, 8, 8>::value, "'void *' is wrong"); +static_assert(check_type<int (*)(int), 8, 8>::value, "function pointer is wrong"); + +//===----------------------------------------------------------------------===// +// stdarg.h +//===----------------------------------------------------------------------===// + +#include <stdarg.h> + +static_assert(check_type<va_list, 8, 8>::value, "va_list is wrong"); + +//===----------------------------------------------------------------------===// +// stddef.h +//===----------------------------------------------------------------------===// + +#define __STDC_WANT_LIB_EXT1__ 1 +#include <stddef.h> + +static_assert(is_same<long int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong"); +static_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong"); +static_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong"); + +#define __need_wint_t +#include <stddef.h> + +static_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong"); + diff --git a/test/Headers/thumbv7-apple-ios-types.cpp b/test/Headers/thumbv7-apple-ios-types.cpp new file mode 100644 index 0000000..e0f77c3 --- /dev/null +++ b/test/Headers/thumbv7-apple-ios-types.cpp @@ -0,0 +1,83 @@ +// RUN: %clang_cc1 -triple thumbv7-apple-ios7.0 -target-abi apcs-gnu -std=c++11 -verify %s +// expected-no-diagnostics + +struct true_type { + static constexpr const bool value = true; +}; + +struct false_type { + static constexpr const bool value = false; +}; + +template <class _Tp, class _Up> struct is_same : public false_type {}; +template <class _Tp> struct is_same<_Tp, _Tp> : public true_type {}; + +// Check that our 'is_same' works. +static_assert(is_same<char, char>::value, "is_same is broken"); +static_assert(!is_same<char, char *>::value, "is_same is broken"); + +template <class _Tp, unsigned _AlignOf, unsigned _SizeOf> +struct check_type { + static constexpr const bool value = + (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf); +}; + +//===----------------------------------------------------------------------===// +// Fundamental types +//===----------------------------------------------------------------------===// + +static_assert(check_type<bool, 1, 1>::value, "bool is wrong"); + +static_assert(check_type<char, 1, 1>::value, "char is wrong"); +static_assert(check_type<signed char, 1, 1>::value, "signed char is wrong"); +static_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong"); + +static_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong"); +static_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong"); +static_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong"); + +static_assert(check_type<short, 2, 2>::value, "short is wrong"); +static_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong"); + +static_assert(check_type<int, 4, 4>::value, "int is wrong"); +static_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong"); + +static_assert(check_type<long, 4, 4>::value, "long is wrong"); +static_assert(check_type<unsigned long, 4, 4>::value, "unsigned long is wrong"); + +static_assert(check_type<long long, 8, 8>::value, "long long is wrong"); +static_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong"); + +static_assert(check_type<float, 4, 4>::value, "float is wrong"); +static_assert(check_type<double, 8, 8>::value, "double is wrong"); +static_assert(check_type<long double, 4, 8>::value, "long double is wrong"); + +static_assert(check_type<void *, 4, 4>::value, "'void *' is wrong"); +static_assert(check_type<int (*)(int), 4, 4>::value, "function pointer is wrong"); + +//===----------------------------------------------------------------------===// +// stdarg.h +//===----------------------------------------------------------------------===// + +#include <stdarg.h> + +static_assert(check_type<va_list, 4, 4>::value, "va_list is wrong"); + +//===----------------------------------------------------------------------===// +// stddef.h +//===----------------------------------------------------------------------===// + +#define __STDC_WANT_LIB_EXT1__ 1 +#include <stddef.h> + +static_assert(is_same<int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong"); +static_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong"); +static_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong"); + +#define __need_wint_t +#include <stddef.h> + +static_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong"); + diff --git a/test/Headers/x86_64-apple-macosx-types.cpp b/test/Headers/x86_64-apple-macosx-types.cpp new file mode 100644 index 0000000..7cbff6e --- /dev/null +++ b/test/Headers/x86_64-apple-macosx-types.cpp @@ -0,0 +1,83 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -std=c++11 -verify %s +// expected-no-diagnostics + +struct true_type { + static constexpr const bool value = true; +}; + +struct false_type { + static constexpr const bool value = false; +}; + +template <class _Tp, class _Up> struct is_same : public false_type {}; +template <class _Tp> struct is_same<_Tp, _Tp> : public true_type {}; + +// Check that our 'is_same' works. +static_assert(is_same<char, char>::value, "is_same is broken"); +static_assert(!is_same<char, char *>::value, "is_same is broken"); + +template <class _Tp, unsigned _AlignOf, unsigned _SizeOf> +struct check_type { + static constexpr const bool value = + (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf); +}; + +//===----------------------------------------------------------------------===// +// Fundamental types +//===----------------------------------------------------------------------===// + +static_assert(check_type<bool, 1, 1>::value, "bool is wrong"); + +static_assert(check_type<char, 1, 1>::value, "char is wrong"); +static_assert(check_type<signed char, 1, 1>::value, "signed char is wrong"); +static_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong"); + +static_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong"); +static_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong"); +static_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong"); + +static_assert(check_type<short, 2, 2>::value, "short is wrong"); +static_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong"); + +static_assert(check_type<int, 4, 4>::value, "int is wrong"); +static_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong"); + +static_assert(check_type<long, 8, 8>::value, "long is wrong"); +static_assert(check_type<unsigned long, 8, 8>::value, "unsigned long is wrong"); + +static_assert(check_type<long long, 8, 8>::value, "long long is wrong"); +static_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong"); + +static_assert(check_type<float, 4, 4>::value, "float is wrong"); +static_assert(check_type<double, 8, 8>::value, "double is wrong"); +static_assert(check_type<long double, 16, 16>::value, "long double is wrong"); + +static_assert(check_type<void *, 8, 8>::value, "'void *' is wrong"); +static_assert(check_type<int (*)(int), 8, 8>::value, "function pointer is wrong"); + +//===----------------------------------------------------------------------===// +// stdarg.h +//===----------------------------------------------------------------------===// + +#include <stdarg.h> + +static_assert(check_type<va_list, 8, 24>::value, "va_list is wrong"); + +//===----------------------------------------------------------------------===// +// stddef.h +//===----------------------------------------------------------------------===// + +#define __STDC_WANT_LIB_EXT1__ 1 +#include <stddef.h> + +static_assert(is_same<long int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong"); +static_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong"); +static_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong"); +static_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong"); + +#define __need_wint_t +#include <stddef.h> + +static_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong"); + diff --git a/test/Headers/xmmintrin.c b/test/Headers/xmmintrin.c index c426f34..76fff0d 100644 --- a/test/Headers/xmmintrin.c +++ b/test/Headers/xmmintrin.c @@ -1,4 +1,9 @@ // RUN: %clang_cc1 %s -ffreestanding -triple x86_64-apple-macosx10.9.0 -emit-llvm -o - | FileCheck %s +// +// RUN: rm -rf %t +// RUN: %clang_cc1 %s -ffreestanding -triple x86_64-apple-macosx10.9.0 -emit-llvm -o - \ +// RUN: -fmodules -fmodules-cache-path=%t -isystem %S/Inputs/include \ +// RUN: | FileCheck %s #include <xmmintrin.h> @@ -11,3 +16,10 @@ __m64 test_mm_cvtps_pi16(__m128 a) { return _mm_cvtps_pi16(a); } + +// Make sure that including <xmmintrin.h> also makes <emmintrin.h>'s content available. +// This is an ugly hack for GCC compatibility. +__m128 test_xmmintrin_provides_emmintrin(__m128d __a, __m128d __b) { + return _mm_add_sd(__a, __b); +} + |