diff options
Diffstat (limited to 'test/Lexer')
-rw-r--r-- | test/Lexer/coroutines.cpp | 12 | ||||
-rw-r--r-- | test/Lexer/cxx-features.cpp | 5 | ||||
-rw-r--r-- | test/Lexer/cxx0x_keyword_as_cxx98.cpp | 2 | ||||
-rw-r--r-- | test/Lexer/has_feature_cxx0x.cpp | 2 | ||||
-rw-r--r-- | test/Lexer/has_feature_rtti.cpp | 1 | ||||
-rw-r--r-- | test/Lexer/hexfloat.cpp | 2 | ||||
-rw-r--r-- | test/Lexer/keywords_test.c | 15 | ||||
-rw-r--r-- | test/Lexer/keywords_test.cpp | 22 | ||||
-rw-r--r-- | test/Lexer/ms-extensions.c | 4 | ||||
-rw-r--r-- | test/Lexer/ms-extensions.cpp | 2 | ||||
-rw-r--r-- | test/Lexer/msdos-cpm-eof.c | 4 | ||||
-rw-r--r-- | test/Lexer/objc_macros.m | 22 | ||||
-rw-r--r-- | test/Lexer/unicode.c | 11 | ||||
-rw-r--r-- | test/Lexer/warn_binary_literals.cpp | 5 |
14 files changed, 98 insertions, 11 deletions
diff --git a/test/Lexer/coroutines.cpp b/test/Lexer/coroutines.cpp new file mode 100644 index 0000000..86d5f96 --- /dev/null +++ b/test/Lexer/coroutines.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fsyntax-only %s +// RUN: %clang_cc1 -fcoroutines -DCORO -fsyntax-only %s + +#ifdef CORO +#define CORO_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) +#else +#define CORO_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) +#endif + +CORO_KEYWORD(co_await); +CORO_KEYWORD(co_return); +CORO_KEYWORD(co_yield); diff --git a/test/Lexer/cxx-features.cpp b/test/Lexer/cxx-features.cpp index 4ec4d55..6c4a092 100644 --- a/test/Lexer/cxx-features.cpp +++ b/test/Lexer/cxx-features.cpp @@ -2,6 +2,7 @@ // RUN: %clang_cc1 -std=c++11 -verify %s // RUN: %clang_cc1 -std=c++1y -fsized-deallocation -verify %s // RUN: %clang_cc1 -std=c++1y -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s +// RUN: %clang_cc1 -fcoroutines -DCOROUTINES -verify %s // expected-no-diagnostics @@ -128,3 +129,7 @@ #if check(experimental_concepts, 0, 0, CONCEPTS_TS) #error "wrong value for __cpp_experimental_concepts" #endif + +#if (COROUTINES && !__cpp_coroutines) || (!COROUTINES && __cpp_coroutines) +#error "wrong value for __cpp_coroutines" +#endif diff --git a/test/Lexer/cxx0x_keyword_as_cxx98.cpp b/test/Lexer/cxx0x_keyword_as_cxx98.cpp index 5d16810..8f5fcf4 100644 --- a/test/Lexer/cxx0x_keyword_as_cxx98.cpp +++ b/test/Lexer/cxx0x_keyword_as_cxx98.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -fsyntax-only -Wc++11-compat +// RUN: %clang_cc1 %s -verify -fsyntax-only -Wc++11-compat -std=c++98 #define constexpr const constexpr int x = 0; diff --git a/test/Lexer/has_feature_cxx0x.cpp b/test/Lexer/has_feature_cxx0x.cpp index dbb650e..8c7ff18 100644 --- a/test/Lexer/has_feature_cxx0x.cpp +++ b/test/Lexer/has_feature_cxx0x.cpp @@ -1,6 +1,6 @@ // 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++98 %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++14 %s -o - | FileCheck --check-prefix=CHECK-14 %s // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1z %s -o - | FileCheck --check-prefix=CHECK-1Z %s diff --git a/test/Lexer/has_feature_rtti.cpp b/test/Lexer/has_feature_rtti.cpp index 4bfeead..26eaa2e 100644 --- a/test/Lexer/has_feature_rtti.cpp +++ b/test/Lexer/has_feature_rtti.cpp @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-RTTI %s // RUN: %clang_cc1 -E -fno-rtti %s -o - | FileCheck --check-prefix=CHECK-NO-RTTI %s +// RUN: %clang_cc1 -E -fno-rtti-data %s -o - | FileCheck --check-prefix=CHECK-NO-RTTI %s #if __has_feature(cxx_rtti) int foo(); diff --git a/test/Lexer/hexfloat.cpp b/test/Lexer/hexfloat.cpp index bd53d4a..6985c7f 100644 --- a/test/Lexer/hexfloat.cpp +++ b/test/Lexer/hexfloat.cpp @@ -12,4 +12,4 @@ double h = 0x1.p2; // expected-warning{{hexadecimal floating constants are a C99 double i = 0p+3; // expected-error{{invalid suffix 'p' on integer constant}} #define PREFIX(x) foo ## x double foo0p = 1, j = PREFIX(0p+3); // ok -double k = 0x42_amp+3; // expected-error-re{{{{invalid suffix '_amp' on integer constant|no matching literal operator for call to 'operator "" _amp'}}}} +double k = 0x42_amp+3; // expected-error-re{{{{invalid suffix '_amp' on integer constant|no matching literal operator for call to 'operator""_amp'}}}} diff --git a/test/Lexer/keywords_test.c b/test/Lexer/keywords_test.c index 4eb1700..7f840c1 100644 --- a/test/Lexer/keywords_test.c +++ b/test/Lexer/keywords_test.c @@ -9,6 +9,10 @@ // RUN: %clang_cc1 -std=c99 -fms-extensions -E %s -o - \ // RUN: | FileCheck --check-prefix=CHECK-MS-KEYWORDS %s +// RUN: %clang_cc1 -std=c99 -fdeclspec -E %s -o - \ +// RUN: | FileCheck --check-prefix=CHECK-DECLSPEC-KEYWORD %s +// RUN: %clang_cc1 -std=c99 -fms-extensions -fno-declspec -E %s -o - \ +// RUN: | FileCheck --check-prefix=CHECK-MS-KEYWORDS-WITHOUT-DECLSPEC %s void f() { // CHECK-NONE: int asm @@ -22,8 +26,19 @@ void f() { // CHECK-NONE: no_ms_wchar // CHECK-MS-KEYWORDS: has_ms_wchar +// CHECK-MS-KEYWORDS-WITHOUT-DECLSPEC: has_ms_wchar #if __is_identifier(__wchar_t) void no_ms_wchar(); #else void has_ms_wchar(); #endif + +// CHECK-NONE: no_declspec +// CHECK-MS-KEYWORDS: has_declspec +// CHECK-MS-KEYWORDS-WITHOUT-DECLSPEC: no_declspec +// CHECK-DECLSPEC-KEYWORD: has_declspec +#if __is_identifier(__declspec) +void no_declspec(); +#else +void has_declspec(); +#endif diff --git a/test/Lexer/keywords_test.cpp b/test/Lexer/keywords_test.cpp index dd45b40..aba8d02 100644 --- a/test/Lexer/keywords_test.cpp +++ b/test/Lexer/keywords_test.cpp @@ -1,6 +1,19 @@ // RUN: %clang_cc1 -std=c++03 -fsyntax-only %s // RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s // RUN: %clang_cc1 -std=c++14 -fconcepts-ts -DCXX11 -DCONCEPTS -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fdeclspec -DDECLSPEC -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fms-extensions -DDECLSPEC -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fborland-extensions -DDECLSPEC -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fborland-extensions -fno-declspec -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fdeclspec -fno-declspec -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s +// RUN: %clang_cc1 -std=c++03 -fms-extensions -fdeclspec -fno-declspec -fsyntax-only %s +// RUN: %clang -std=c++03 -target i686-windows-msvc -DDECLSPEC -fsyntax-only %s +// RUN: %clang -std=c++03 -target x86_64-scei-ps4 -DDECLSPEC -fsyntax-only %s +// RUN: %clang -std=c++03 -target i686-windows-msvc -fno-declspec -fsyntax-only %s +// RUN: %clang -std=c++03 -target x86_64-scei-ps4 -fno-declspec -fsyntax-only %s #define IS_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) #define NOT_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) @@ -12,6 +25,12 @@ #define CONCEPTS_KEYWORD(NAME) NOT_KEYWORD(NAME) #endif +#ifdef DECLSPEC +#define DECLSPEC_KEYWORD(NAME) IS_KEYWORD(NAME) +#else +#define DECLSPEC_KEYWORD(NAME) NOT_KEYWORD(NAME) +#endif + #ifdef CXX11 #define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME) #define CXX11_TYPE(NAME) IS_TYPE(NAME) @@ -38,6 +57,9 @@ CXX11_KEYWORD(thread_local); CONCEPTS_KEYWORD(concept); CONCEPTS_KEYWORD(requires); +// __declspec extension +DECLSPEC_KEYWORD(__declspec); + // Clang extension IS_KEYWORD(__char16_t); IS_TYPE(__char16_t); diff --git a/test/Lexer/ms-extensions.c b/test/Lexer/ms-extensions.c index ebcf0f4..de7ef93 100644 --- a/test/Lexer/ms-extensions.c +++ b/test/Lexer/ms-extensions.c @@ -7,10 +7,6 @@ __int16 x2 = 4i16; __int32 x3 = 5i32; __int64 x5 = 0x42i64; __int64 x6 = 0x42I64; -#ifndef __SIZEOF_INT128__ -// expected-error@+2 {{__int128 is not supported on this target}} -#endif -__int64 x4 = 70000000i128; __int64 y = 0x42i64u; // expected-error {{invalid suffix}} __int64 w = 0x43ui64; diff --git a/test/Lexer/ms-extensions.cpp b/test/Lexer/ms-extensions.cpp index 7e18a6c..9a858a4 100644 --- a/test/Lexer/ms-extensions.cpp +++ b/test/Lexer/ms-extensions.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-user-defined-literal -fms-extensions -fms-compatibility %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-user-defined-literal -fms-extensions -fms-compatibility -std=c++98 %s #define bar(x) #x const char * f() { diff --git a/test/Lexer/msdos-cpm-eof.c b/test/Lexer/msdos-cpm-eof.c index 3469b59..0b5150d 100644 --- a/test/Lexer/msdos-cpm-eof.c +++ b/test/Lexer/msdos-cpm-eof.c @@ -1,8 +1,8 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions %s -// expected-no-diagnostics +// RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions -Wmicrosoft %s int x; +// expected-warning@+1 {{treating Ctrl-Z as end-of-file is a Microsoft extension}} I am random garbage after ^Z diff --git a/test/Lexer/objc_macros.m b/test/Lexer/objc_macros.m new file mode 100644 index 0000000..0223bed --- /dev/null +++ b/test/Lexer/objc_macros.m @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only "-triple" "x86_64-apple-macosx10.10.0" -fobjc-runtime-has-weak -fobjc-weak %s -verify %s + +#define __strong +// expected-warning@-1 {{ignoring redefinition of Objective-C qualifier macro}} +#define __weak +// expected-warning@-1 {{ignoring redefinition of Objective-C qualifier macro}} +#define __unsafe_unretained +// expected-warning@-1 {{ignoring redefinition of Objective-C qualifier macro}} +#define __autoreleased +// No warning because this is the default expansion anyway. + +// Check that this still expands to the right text. +void test() { + goto label; // expected-error {{cannot jump from this goto statement to its label}} + __weak id x; // expected-note {{jump bypasses initialization of __weak variable}} +label: + return; +} + +#undef __strong +#define __strong +// No warning. diff --git a/test/Lexer/unicode.c b/test/Lexer/unicode.c index de758f1..30805d1 100644 --- a/test/Lexer/unicode.c +++ b/test/Lexer/unicode.c @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -x c -std=c11 %s +// RUN: %clang_cc1 -fsyntax-only -verify -x c++ -std=c++11 %s // RUN: %clang_cc1 -E -DPP_ONLY=1 %s -o %t // RUN: FileCheck --strict-whitespace --input-file=%t %s @@ -24,3 +25,11 @@ COPYRIGHT // CHECK: Copyright © {{2012}} CHECK: The preprocessor should not complain about Unicode characters like ©. #endif + +// A 🌹 by any other name.... +extern int 🌹; +int 🌵(int 🌻) { return 🌻+ 1; } +int main () { + int 🌷 = 🌵(🌹); + return 🌷; +} diff --git a/test/Lexer/warn_binary_literals.cpp b/test/Lexer/warn_binary_literals.cpp new file mode 100644 index 0000000..d196be9 --- /dev/null +++ b/test/Lexer/warn_binary_literals.cpp @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s -Wc++14-binary-literal +// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s -Wc++14-extensions + +int x = 0b11; +// expected-warning@-1{{binary integer literals are a C++14 extension}} |