1 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s 2 3 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s 4 5 void foo() { 6 } 7 8 #pragma omp parallel for // expected-error {{unexpected OpenMP directive '#pragma omp parallel for'}} 9 10 int main(int argc, char **argv) { 11 #pragma omp parallel for { // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 12 for (int i = 0; i < argc; ++i) 13 foo(); 14 #pragma omp parallel for ( // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 15 for (int i = 0; i < argc; ++i) 16 foo(); 17 #pragma omp parallel for[ // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 18 for (int i = 0; i < argc; ++i) 19 foo(); 20 #pragma omp parallel for] // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 21 for (int i = 0; i < argc; ++i) 22 foo(); 23 #pragma omp parallel for) // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 24 for (int i = 0; i < argc; ++i) 25 foo(); 26 #pragma omp parallel for } // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 27 for (int i = 0; i < argc; ++i) 28 foo(); 29 #pragma omp parallel for 30 for (int i = 0; i < argc; ++i) 31 foo(); 32 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 33 #pragma omp parallel for unknown() 34 for (int i = 0; i < argc; ++i) 35 foo(); 36 L1: 37 for (int i = 0; i < argc; ++i) 38 foo(); 39 #pragma omp parallel for 40 for (int i = 0; i < argc; ++i) 41 foo(); 42 #pragma omp parallel for 43 for (int i = 0; i < argc; ++i) { 44 goto L1; // expected-error {{use of undeclared label 'L1'}} 45 argc++; 46 } 47 48 for (int i = 0; i < 10; ++i) { 49 switch (argc) { 50 case (0): 51 #pragma omp parallel for 52 for (int i = 0; i < argc; ++i) { 53 foo(); 54 break; // expected-error {{'break' statement cannot be used in OpenMP for loop}} 55 continue; 56 } 57 default: 58 break; 59 } 60 } 61 #pragma omp parallel for default(none) // expected-note {{explicit data sharing attribute requested here}} 62 for (int i = 0; i < 10; ++i) 63 ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} 64 65 goto L2; // expected-error {{use of undeclared label 'L2'}} 66 #pragma omp parallel for 67 for (int i = 0; i < argc; ++i) 68 L2: 69 foo(); 70 #pragma omp parallel for 71 for (int i = 0; i < argc; ++i) { 72 return 1; // expected-error {{cannot return from OpenMP region}} 73 } 74 75 [[]] // expected-error {{an attribute list cannot appear here}} 76 #pragma omp parallel for 77 for (int n = 0; n < 100; ++n) { 78 } 79 80 return 0; 81 } 82 83 void test_ordered() { 84 #pragma omp parallel for ordered ordered // expected-error {{directive '#pragma omp parallel for' cannot contain more than one 'ordered' clause}} 85 for (int i = 0; i < 16; ++i) 86 ; 87 } 88 89