summaryrefslogtreecommitdiffstats
path: root/test/Lexer
diff options
context:
space:
mode:
Diffstat (limited to 'test/Lexer')
-rw-r--r--test/Lexer/cxx1y_binary_literal.cpp19
-rw-r--r--test/Lexer/has_extension_cxx.cpp6
-rw-r--r--test/Lexer/has_feature_c1x.c11
-rw-r--r--test/Lexer/has_feature_cxx0x.cpp194
-rw-r--r--test/Lexer/pragma-message.c16
-rw-r--r--test/Lexer/pragma-message2.c19
6 files changed, 204 insertions, 61 deletions
diff --git a/test/Lexer/cxx1y_binary_literal.cpp b/test/Lexer/cxx1y_binary_literal.cpp
new file mode 100644
index 0000000..96dce3d
--- /dev/null
+++ b/test/Lexer/cxx1y_binary_literal.cpp
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -std=c++1y %s -verify
+
+static_assert(0b1001 == 9, "");
+
+using I = int;
+using I = decltype(0b101001);
+using ULL = unsigned long long;
+using ULL = decltype(0b10101001ULL);
+
+constexpr unsigned long long operator""_foo(unsigned long long n) {
+ return n * 2;
+}
+static_assert(0b10001111_foo == 286, "");
+
+int k1 = 0b1234; // expected-error {{invalid digit '2' in binary constant}}
+// FIXME: If we ever need to support a standard suffix starting with [a-f],
+// we'll need to rework our binary literal parsing rules.
+int k2 = 0b10010f; // expected-error {{invalid digit 'f' in binary constant}}
+int k3 = 0b10010g; // expected-error {{invalid suffix 'g' on integer constant}}
diff --git a/test/Lexer/has_extension_cxx.cpp b/test/Lexer/has_extension_cxx.cpp
index 6ffeebd..68b542f 100644
--- a/test/Lexer/has_extension_cxx.cpp
+++ b/test/Lexer/has_extension_cxx.cpp
@@ -47,3 +47,9 @@ int no_local_type_template_args();
#endif
// CHECK: has_local_type_template_args
+
+#if __has_extension(cxx_binary_literals)
+int has_binary_literals();
+#endif
+
+// CHECK: has_binary_literals
diff --git a/test/Lexer/has_feature_c1x.c b/test/Lexer/has_feature_c1x.c
index c9a5f56..e26e309 100644
--- a/test/Lexer/has_feature_c1x.c
+++ b/test/Lexer/has_feature_c1x.c
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -E -std=c1x %s -o - | FileCheck --check-prefix=CHECK-1X %s
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c1x %s -o - | FileCheck --check-prefix=CHECK-1X %s
// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-1X %s
#if __has_feature(c_atomic)
@@ -37,6 +37,15 @@ int no_alignas();
// CHECK-1X: has_alignas
// CHECK-NO-1X: no_alignas
+#if __has_feature(c_thread_local)
+int has_thread_local();
+#else
+int no_thread_local();
+#endif
+
+// CHECK-1X: has_thread_local
+// CHECK-NO-1X: no_thread_local
+
#if __STDC_VERSION__ > 199901L
int is_c1x();
#else
diff --git a/test/Lexer/has_feature_cxx0x.cpp b/test/Lexer/has_feature_cxx0x.cpp
index 8e0222d..62a965c 100644
--- a/test/Lexer/has_feature_cxx0x.cpp
+++ b/test/Lexer/has_feature_cxx0x.cpp
@@ -1,5 +1,7 @@
-// RUN: %clang_cc1 -E -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-0X %s
-// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-0X %s
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-11 %s
+// RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1y %s -o - | FileCheck --check-prefix=CHECK-1Y %s
#if __has_feature(cxx_atomic)
int has_atomic();
@@ -7,8 +9,9 @@ int has_atomic();
int no_atomic();
#endif
-// CHECK-0X: has_atomic
-// CHECK-NO-0X: no_atomic
+// CHECK-1Y: has_atomic
+// CHECK-11: has_atomic
+// CHECK-NO-11: no_atomic
#if __has_feature(cxx_lambdas)
int has_lambdas();
@@ -16,8 +19,9 @@ int has_lambdas();
int no_lambdas();
#endif
-// CHECK-0X: has_lambdas
-// CHECK-NO-0X: no_lambdas
+// CHECK-1Y: has_lambdas
+// CHECK-11: has_lambdas
+// CHECK-NO-11: no_lambdas
#if __has_feature(cxx_nullptr)
@@ -26,8 +30,9 @@ int has_nullptr();
int no_nullptr();
#endif
-// CHECK-0X: has_nullptr
-// CHECK-NO-0X: no_nullptr
+// CHECK-1Y: has_nullptr
+// CHECK-11: has_nullptr
+// CHECK-NO-11: no_nullptr
#if __has_feature(cxx_decltype)
@@ -36,8 +41,9 @@ int has_decltype();
int no_decltype();
#endif
-// CHECK-0X: has_decltype
-// CHECK-NO-0X: no_decltype
+// CHECK-1Y: has_decltype
+// CHECK-11: has_decltype
+// CHECK-NO-11: no_decltype
#if __has_feature(cxx_decltype_incomplete_return_types)
@@ -46,8 +52,9 @@ int has_decltype_incomplete_return_types();
int no_decltype_incomplete_return_types();
#endif
-// CHECK-0X: has_decltype_incomplete_return_types
-// CHECK-NO-0X: no_decltype_incomplete_return_types
+// CHECK-1Y: has_decltype_incomplete_return_types
+// CHECK-11: has_decltype_incomplete_return_types
+// CHECK-NO-11: no_decltype_incomplete_return_types
#if __has_feature(cxx_auto_type)
@@ -56,8 +63,9 @@ int has_auto_type();
int no_auto_type();
#endif
-// CHECK-0X: has_auto_type
-// CHECK-NO-0X: no_auto_type
+// CHECK-1Y: has_auto_type
+// CHECK-11: has_auto_type
+// CHECK-NO-11: no_auto_type
#if __has_feature(cxx_trailing_return)
@@ -66,8 +74,9 @@ int has_trailing_return();
int no_trailing_return();
#endif
-// CHECK-0X: has_trailing_return
-// CHECK-NO-0X: no_trailing_return
+// CHECK-1Y: has_trailing_return
+// CHECK-11: has_trailing_return
+// CHECK-NO-11: no_trailing_return
#if __has_feature(cxx_attributes)
@@ -76,8 +85,9 @@ int has_attributes();
int no_attributes();
#endif
-// CHECK-0X: has_attributes
-// CHECK-NO-0X: no_attributes
+// CHECK-1Y: has_attributes
+// CHECK-11: has_attributes
+// CHECK-NO-11: no_attributes
#if __has_feature(cxx_static_assert)
@@ -86,8 +96,9 @@ int has_static_assert();
int no_static_assert();
#endif
-// CHECK-0X: has_static_assert
-// CHECK-NO-0X: no_static_assert
+// CHECK-1Y: has_static_assert
+// CHECK-11: has_static_assert
+// CHECK-NO-11: no_static_assert
#if __has_feature(cxx_deleted_functions)
int has_deleted_functions();
@@ -95,8 +106,9 @@ int has_deleted_functions();
int no_deleted_functions();
#endif
-// CHECK-0X: has_deleted_functions
-// CHECK-NO-0X: no_deleted_functions
+// CHECK-1Y: has_deleted_functions
+// CHECK-11: has_deleted_functions
+// CHECK-NO-11: no_deleted_functions
#if __has_feature(cxx_defaulted_functions)
int has_defaulted_functions();
@@ -104,8 +116,9 @@ int has_defaulted_functions();
int no_defaulted_functions();
#endif
-// CHECK-0X: has_defaulted_functions
-// CHECK-NO-0X: no_defaulted_functions
+// CHECK-1Y: has_defaulted_functions
+// CHECK-11: has_defaulted_functions
+// CHECK-NO-11: no_defaulted_functions
#if __has_feature(cxx_rvalue_references)
int has_rvalue_references();
@@ -113,8 +126,9 @@ int has_rvalue_references();
int no_rvalue_references();
#endif
-// CHECK-0X: has_rvalue_references
-// CHECK-NO-0X: no_rvalue_references
+// CHECK-1Y: has_rvalue_references
+// CHECK-11: has_rvalue_references
+// CHECK-NO-11: no_rvalue_references
#if __has_feature(cxx_variadic_templates)
@@ -123,8 +137,9 @@ int has_variadic_templates();
int no_variadic_templates();
#endif
-// CHECK-0X: has_variadic_templates
-// CHECK-NO-0X: no_variadic_templates
+// CHECK-1Y: has_variadic_templates
+// CHECK-11: has_variadic_templates
+// CHECK-NO-11: no_variadic_templates
#if __has_feature(cxx_inline_namespaces)
@@ -133,8 +148,9 @@ int has_inline_namespaces();
int no_inline_namespaces();
#endif
-// CHECK-0X: has_inline_namespaces
-// CHECK-NO-0X: no_inline_namespaces
+// CHECK-1Y: has_inline_namespaces
+// CHECK-11: has_inline_namespaces
+// CHECK-NO-11: no_inline_namespaces
#if __has_feature(cxx_range_for)
@@ -143,8 +159,9 @@ int has_range_for();
int no_range_for();
#endif
-// CHECK-0X: has_range_for
-// CHECK-NO-0X: no_range_for
+// CHECK-1Y: has_range_for
+// CHECK-11: has_range_for
+// CHECK-NO-11: no_range_for
#if __has_feature(cxx_reference_qualified_functions)
@@ -153,8 +170,9 @@ int has_reference_qualified_functions();
int no_reference_qualified_functions();
#endif
-// CHECK-0X: has_reference_qualified_functions
-// CHECK-NO-0X: no_reference_qualified_functions
+// CHECK-1Y: has_reference_qualified_functions
+// CHECK-11: has_reference_qualified_functions
+// CHECK-NO-11: no_reference_qualified_functions
#if __has_feature(cxx_default_function_template_args)
int has_default_function_template_args();
@@ -162,8 +180,9 @@ int has_default_function_template_args();
int no_default_function_template_args();
#endif
-// CHECK-0X: has_default_function_template_args
-// CHECK-NO-0X: no_default_function_template_args
+// CHECK-1Y: has_default_function_template_args
+// CHECK-11: has_default_function_template_args
+// CHECK-NO-11: no_default_function_template_args
#if __has_feature(cxx_noexcept)
int has_noexcept();
@@ -171,8 +190,9 @@ int has_noexcept();
int no_noexcept();
#endif
-// CHECK-0X: has_noexcept
-// CHECK-NO-0X: no_noexcept
+// CHECK-1Y: has_noexcept
+// CHECK-11: has_noexcept
+// CHECK-NO-11: no_noexcept
#if __has_feature(cxx_override_control)
int has_override_control();
@@ -180,8 +200,9 @@ int has_override_control();
int no_override_control();
#endif
-// CHECK-0X: has_override_control
-// CHECK-NO-0X: no_override_control
+// CHECK-1Y: has_override_control
+// CHECK-11: has_override_control
+// CHECK-NO-11: no_override_control
#if __has_feature(cxx_alias_templates)
int has_alias_templates();
@@ -189,8 +210,9 @@ int has_alias_templates();
int no_alias_templates();
#endif
-// CHECK-0X: has_alias_templates
-// CHECK-NO-0X: no_alias_templates
+// CHECK-1Y: has_alias_templates
+// CHECK-11: has_alias_templates
+// CHECK-NO-11: no_alias_templates
#if __has_feature(cxx_implicit_moves)
int has_implicit_moves();
@@ -198,8 +220,9 @@ int has_implicit_moves();
int no_implicit_moves();
#endif
-// CHECK-0X: has_implicit_moves
-// CHECK-NO-0X: no_implicit_moves
+// CHECK-1Y: has_implicit_moves
+// CHECK-11: has_implicit_moves
+// CHECK-NO-11: no_implicit_moves
#if __has_feature(cxx_alignas)
int has_alignas();
@@ -207,8 +230,9 @@ int has_alignas();
int no_alignas();
#endif
-// CHECK-0X: has_alignas
-// CHECK-NO-0X: no_alignas
+// CHECK-1Y: has_alignas
+// CHECK-11: has_alignas
+// CHECK-NO-11: no_alignas
#if __has_feature(cxx_raw_string_literals)
int has_raw_string_literals();
@@ -216,8 +240,9 @@ int has_raw_string_literals();
int no_raw_string_literals();
#endif
-// CHECK-0X: has_raw_string_literals
-// CHECK-NO-0X: no_raw_string_literals
+// CHECK-1Y: has_raw_string_literals
+// CHECK-11: has_raw_string_literals
+// CHECK-NO-11: no_raw_string_literals
#if __has_feature(cxx_unicode_literals)
int has_unicode_literals();
@@ -225,8 +250,9 @@ int has_unicode_literals();
int no_unicode_literals();
#endif
-// CHECK-0X: has_unicode_literals
-// CHECK-NO-0X: no_unicode_literals
+// CHECK-1Y: has_unicode_literals
+// CHECK-11: has_unicode_literals
+// CHECK-NO-11: no_unicode_literals
#if __has_feature(cxx_constexpr)
int has_constexpr();
@@ -234,8 +260,9 @@ int has_constexpr();
int no_constexpr();
#endif
-// CHECK-0X: has_constexpr
-// CHECK-NO-0X: no_constexpr
+// CHECK-1Y: has_constexpr
+// CHECK-11: has_constexpr
+// CHECK-NO-11: no_constexpr
#if __has_feature(cxx_generalized_initializers)
int has_generalized_initializers();
@@ -243,8 +270,9 @@ int has_generalized_initializers();
int no_generalized_initializers();
#endif
-// CHECK-0X: has_generalized_initializers
-// CHECK-NO-0X: no_generalized_initializers
+// CHECK-1Y: has_generalized_initializers
+// CHECK-11: has_generalized_initializers
+// CHECK-NO-11: no_generalized_initializers
#if __has_feature(cxx_unrestricted_unions)
int has_unrestricted_unions();
@@ -252,8 +280,9 @@ int has_unrestricted_unions();
int no_unrestricted_unions();
#endif
-// CHECK-0X: has_unrestricted_unions
-// CHECK-NO-0X: no_unrestricted_unions
+// CHECK-1Y: has_unrestricted_unions
+// CHECK-11: has_unrestricted_unions
+// CHECK-NO-11: no_unrestricted_unions
#if __has_feature(cxx_user_literals)
int has_user_literals();
@@ -261,8 +290,9 @@ int has_user_literals();
int no_user_literals();
#endif
-// CHECK-0X: has_user_literals
-// CHECK-NO-0X: no_user_literals
+// CHECK-1Y: has_user_literals
+// CHECK-11: has_user_literals
+// CHECK-NO-11: no_user_literals
#if __has_feature(cxx_local_type_template_args)
int has_local_type_template_args();
@@ -270,5 +300,49 @@ int has_local_type_template_args();
int no_local_type_template_args();
#endif
-// CHECK-0X: has_local_type_template_args
-// CHECK-NO-0X: no_local_type_template_args
+// CHECK-1Y: has_local_type_template_args
+// CHECK-11: has_local_type_template_args
+// CHECK-NO-11: no_local_type_template_args
+
+#if __has_feature(cxx_inheriting_constructors)
+int has_inheriting_constructors();
+#else
+int no_inheriting_constructors();
+#endif
+
+// CHECK-1Y: has_inheriting_constructors
+// CHECK-11: has_inheriting_constructors
+// CHECK-NO-11: no_inheriting_constructors
+
+#if __has_feature(cxx_thread_local)
+int has_thread_local();
+#else
+int no_thread_local();
+#endif
+
+// CHECK-1Y: has_thread_local
+// CHECK-11: has_thread_local
+// CHECK-NO-11: no_thread_local
+// CHECK-NO-TLS: no_thread_local
+
+// === C++1y features ===
+
+#if __has_feature(cxx_binary_literals)
+int has_binary_literals();
+#else
+int no_binary_literals();
+#endif
+
+// CHECK-1Y: has_binary_literals
+// CHECK-11: no_binary_literals
+// CHECK-NO-11: no_binary_literals
+
+#if __has_feature(cxx_aggregate_nsdmi)
+int has_aggregate_nsdmi();
+#else
+int no_aggregate_nsdmi();
+#endif
+
+// CHECK-1Y: has_aggregate_nsdmi
+// CHECK-11: no_aggregate_nsdmi
+// CHECK-NO-11: no_aggregate_nsdmi
diff --git a/test/Lexer/pragma-message.c b/test/Lexer/pragma-message.c
index b67886f..d0bbe9e 100644
--- a/test/Lexer/pragma-message.c
+++ b/test/Lexer/pragma-message.c
@@ -14,3 +14,19 @@
#pragma message ":O gcc accepts this! " STRING(__LINE__) // expected-warning {{:O gcc accepts this! 14}}
#pragma message(invalid) // expected-error {{expected string literal in pragma message}}
+
+// GCC supports a similar pragma, #pragma GCC warning (which generates a warning
+// message) and #pragma GCC error (which generates an error message).
+
+#pragma GCC warning(":O I'm a message! " STRING(__LINE__)) // expected-warning {{:O I'm a message! 21}}
+#pragma GCC warning ":O gcc accepts this! " STRING(__LINE__) // expected-warning {{:O gcc accepts this! 22}}
+
+#pragma GCC error(":O I'm a message! " STRING(__LINE__)) // expected-error {{:O I'm a message! 24}}
+#pragma GCC error ":O gcc accepts this! " STRING(__LINE__) // expected-error {{:O gcc accepts this! 25}}
+
+#define COMPILE_ERROR(x) _Pragma(STRING2(GCC error(x)))
+COMPILE_ERROR("Compile error at line " STRING(__LINE__) "!"); // expected-error {{Compile error at line 28!}}
+
+#pragma message // expected-error {{pragma message requires parenthesized string}}
+#pragma GCC warning("" // expected-error {{pragma warning requires parenthesized string}}
+#pragma GCC error(1) // expected-error {{expected string literal in pragma error}}
diff --git a/test/Lexer/pragma-message2.c b/test/Lexer/pragma-message2.c
new file mode 100644
index 0000000..224ccfb
--- /dev/null
+++ b/test/Lexer/pragma-message2.c
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -E -Werror -verify %s 2>&1 | FileCheck %s
+
+#pragma message "\\test" // expected-warning {{\test}}
+// CHECK: #pragma message("\134test")
+
+#pragma message("\\test") // expected-warning {{\test}}
+// CHECK: #pragma message("\134test")
+
+#pragma GCC warning "\"" "te" "st" "\"" // expected-warning {{"test"}}
+// CHECK: #pragma GCC warning "\042test\042"
+
+#pragma GCC warning("\"" "te" "st" "\"") // expected-warning {{"test"}}
+// CHECK: #pragma GCC warning "\042test\042"
+
+#pragma GCC error "" "[ ]" "" // expected-error {{[ ]}}
+// CHECK: #pragma GCC error "[\011]"
+
+#pragma GCC error("" "[ ]" "") // expected-error {{[ ]}}
+// CHECK: #pragma GCC error "[\011]"
OpenPOWER on IntegriCloud