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