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