Files
llvm-project/clang/test/OpenMP/barrier_messages.cpp
Alexey Bataev c4fad65bfc [OPENMP] Fix for declarative/standalone directives use.
Fixes processing of declarative directives and standalone executable directives. Declarative directives should not be allowed as an immediate statements and standalone executable directives are allowed to be used in case-stmt constructs.

llvm-svn: 257586
2016-01-13 11:18:54 +00:00

111 lines
2.9 KiB
C++

// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s
template <class T>
T tmain(T argc) {
#pragma omp barrier
;
#pragma omp barrier untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}}
#pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}}
if (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
if (argc) {
#pragma omp barrier
}
while (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
while (argc) {
#pragma omp barrier
}
do
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
while (argc)
;
do {
#pragma omp barrier
} while (argc);
switch (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
switch (argc)
case 1:
#pragma omp barrier
switch (argc)
case 1: {
#pragma omp barrier
}
switch (argc) {
#pragma omp barrier
case 1:
#pragma omp barrier
break;
default: {
#pragma omp barrier
} break;
}
for (;;)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
for (;;) {
#pragma omp barrier
}
label:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
label1 : {
#pragma omp barrier
}
return T();
}
int main(int argc, char **argv) {
#pragma omp barrier
;
#pragma omp barrier untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}}
#pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}}
if (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
if (argc) {
#pragma omp barrier
}
while (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
while (argc) {
#pragma omp barrier
}
do
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
while (argc)
;
do {
#pragma omp barrier
} while (argc);
switch (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
switch (argc)
case 1:
#pragma omp barrier
switch (argc)
case 1: {
#pragma omp barrier
}
switch (argc) {
#pragma omp barrier
case 1:
#pragma omp barrier
break;
default: {
#pragma omp barrier
} break;
}
for (;;)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
for (;;) {
#pragma omp barrier
}
label:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
label1 : {
#pragma omp barrier
}
return tmain(argc);
}