diff options
Diffstat (limited to 'test/Parser')
-rw-r--r-- | test/Parser/MicrosoftExtensions.c | 5 | ||||
-rw-r--r-- | test/Parser/nullability.c | 16 | ||||
-rw-r--r-- | test/Parser/pragma-loop-safety.cpp | 34 | ||||
-rw-r--r-- | test/Parser/pragma-loop.cpp | 8 |
4 files changed, 59 insertions, 4 deletions
diff --git a/test/Parser/MicrosoftExtensions.c b/test/Parser/MicrosoftExtensions.c index 40a9510d6e244..389cf6dfc03c6 100644 --- a/test/Parser/MicrosoftExtensions.c +++ b/test/Parser/MicrosoftExtensions.c @@ -52,6 +52,11 @@ void deprecated_enum_test(void) { [returnvalue:SA_Post( attr=1)] int foo1([SA_Post(attr=1)] void *param); +[unbalanced(attribute) /* expected-note {{to match this '['}} */ +void f(void); /* expected-error {{expected ']'}} */ + +[] __interface I {}; /* expected-error {{Microsoft attribute block cannot be empty}} */ + void ms_intrinsics(int a) { __noop(); __assume(a); diff --git a/test/Parser/nullability.c b/test/Parser/nullability.c new file mode 100644 index 0000000000000..f2b6abf73dcf6 --- /dev/null +++ b/test/Parser/nullability.c @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c99 -Wno-nullability-declspec -pedantic %s -verify + +__nonnull int *ptr; // expected-warning{{type nullability specifier '__nonnull' is a Clang extension}} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnullability-extension" +__nonnull int *ptr2; // no-warning +#pragma clang diagnostic pop + +#if __has_feature(nullability) +# error Nullability should not be supported in C under -pedantic -std=c99 +#endif + +#if !__has_extension(nullability) +# error Nullability should always be supported as an extension +#endif diff --git a/test/Parser/pragma-loop-safety.cpp b/test/Parser/pragma-loop-safety.cpp new file mode 100644 index 0000000000000..cc98c775e5950 --- /dev/null +++ b/test/Parser/pragma-loop-safety.cpp @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -std=c++11 -verify %s + +// Note that this puts the expected lines before the directives to work around +// limitations in the -verify mode. + +void test(int *List, int Length) { + int i = 0; + +#pragma clang loop vectorize(assume_safety) +#pragma clang loop interleave(assume_safety) + while (i + 1 < Length) { + List[i] = i; + } + +/* expected-error {{expected ')'}} */ #pragma clang loop vectorize(assume_safety +/* expected-error {{expected ')'}} */ #pragma clang loop interleave(assume_safety + +/* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(assume_safety) + +/* expected-error {{invalid argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop vectorize(badidentifier) +/* expected-error {{invalid argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop interleave(badidentifier) +/* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(badidentifier) + while (i-7 < Length) { + List[i] = i; + } + +/* expected-error {{duplicate directives 'vectorize(assume_safety)' and 'vectorize(enable)'}} */ #pragma clang loop vectorize(enable) +#pragma clang loop vectorize(assume_safety) +/* expected-error {{duplicate directives 'interleave(assume_safety)' and 'interleave(enable)'}} */ #pragma clang loop interleave(enable) +#pragma clang loop interleave(assume_safety) + while (i-9 < Length) { + List[i] = i; + } +} diff --git a/test/Parser/pragma-loop.cpp b/test/Parser/pragma-loop.cpp index a0213ac50d5a8..60820584a9c8b 100644 --- a/test/Parser/pragma-loop.cpp +++ b/test/Parser/pragma-loop.cpp @@ -130,7 +130,7 @@ void test(int *List, int Length) { /* expected-error {{expected ')'}} */ #pragma clang loop interleave_count(4 /* expected-error {{expected ')'}} */ #pragma clang loop unroll_count(4 -/* expected-error {{missing argument; expected 'enable' or 'disable'}} */ #pragma clang loop vectorize() +/* expected-error {{missing argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop vectorize() /* expected-error {{missing argument; expected an integer value}} */ #pragma clang loop interleave_count() /* expected-error {{missing argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll() @@ -184,8 +184,8 @@ const int VV = 4; List[i] = i; } -/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop vectorize(badidentifier) -/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop interleave(badidentifier) +/* expected-error {{invalid argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop vectorize(badidentifier) +/* expected-error {{invalid argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop interleave(badidentifier) /* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(badidentifier) while (i-7 < Length) { List[i] = i; @@ -194,7 +194,7 @@ const int VV = 4; // PR20069 - Loop pragma arguments that are not identifiers or numeric // constants crash FE. /* expected-error {{expected ')'}} */ #pragma clang loop vectorize(() -/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop interleave(*) +/* expected-error {{invalid argument; expected 'enable', 'assume_safety' or 'disable'}} */ #pragma clang loop interleave(*) /* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(=) /* expected-error {{type name requires a specifier or qualifier}} expected-error {{expected expression}} */ #pragma clang loop vectorize_width(^) /* expected-error {{expected expression}} expected-error {{expected expression}} */ #pragma clang loop interleave_count(/) |