diff options
Diffstat (limited to 'clang/test/OpenMP/parallel_messages.cpp')
-rw-r--r-- | clang/test/OpenMP/parallel_messages.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/clang/test/OpenMP/parallel_messages.cpp b/clang/test/OpenMP/parallel_messages.cpp index 8b0c0353c20..aa932e69e37 100644 --- a/clang/test/OpenMP/parallel_messages.cpp +++ b/clang/test/OpenMP/parallel_messages.cpp @@ -7,6 +7,7 @@ void foo() { #pragma omp parallel // expected-error {{unexpected OpenMP directive '#pragma omp parallel'}} +int a; struct S; S& bar(); int main(int argc, char **argv) { @@ -54,8 +55,11 @@ int main(int argc, char **argv) { break; } } - #pragma omp parallel default(none) - ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} +#pragma omp parallel default(none) // expected-note 2 {{explicit data sharing attribute requested here}} + { + ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} + ++a; // expected-error {{variable 'a' must have explicitly specified data sharing attributes}} + } goto L2; // expected-error {{use of undeclared label 'L2'}} #pragma omp parallel @@ -73,3 +77,25 @@ int main(int argc, char **argv) { return 0; } +struct a { + static constexpr int b = 0; +}; +template <bool> struct c; +template <typename d, typename e> bool operator<(d, e); +struct f { + int cbegin; +}; +class g { + f blocks; + void j(); +}; +template <typename> struct is_error_code_enum : a {}; +struct h { + template <typename i, typename = c<is_error_code_enum<i>::b>> h(i); +}; +h operator<(h, h); +void g::j() { +#pragma omp parallel for default(none) + for (auto a = blocks.cbegin; a < blocks; ++a) // expected-error {{invalid operands to binary expression ('f' and 'int')}} + ; +} |