1 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -verify=expected,omp45 -std=c++11 %s -Wuninitialized 2 // RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -verify=expected,omp50 -std=c++11 %s -Wuninitialized 3 4 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 -std=c++11 %s -Wuninitialized 5 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 -std=c++11 %s -Wuninitialized 6 7 void xxx(int argc) { 8 int x; // expected-note {{initialize the variable 'x' to silence this warning}} 9 #pragma omp target 10 #pragma omp teams distribute parallel for simd 11 for (int i = 0; i < 10; ++i) 12 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}} 13 } 14 15 void foo() { 16 } 17 18 static int pvt; 19 #pragma omp threadprivate(pvt) 20 21 #pragma omp teams distribute parallel for simd // expected-error {{unexpected OpenMP directive '#pragma omp teams distribute parallel for simd'}} 22 23 int main(int argc, char **argv) { 24 #pragma omp target 25 #pragma omp teams distribute parallel for simd 26 f; // expected-error {{use of undeclared identifier 'f'}} 27 #pragma omp target 28 #pragma omp teams distribute parallel for simd { // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 29 for (int i = 0; i < argc; ++i) 30 foo(); 31 #pragma omp target 32 #pragma omp teams distribute parallel for simd ( // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 33 for (int i = 0; i < argc; ++i) 34 foo(); 35 #pragma omp target 36 #pragma omp teams distribute parallel for simd[ // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 37 for (int i = 0; i < argc; ++i) 38 foo(); 39 #pragma omp target 40 #pragma omp teams distribute parallel for simd] // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 41 for (int i = 0; i < argc; ++i) 42 foo(); 43 #pragma omp target 44 #pragma omp teams distribute parallel for simd) // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 45 for (int i = 0; i < argc; ++i) 46 foo(); 47 #pragma omp target 48 #pragma omp teams distribute parallel for simd } // expected-warning {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 49 for (int i = 0; i < argc; ++i) 50 foo(); 51 #pragma omp target 52 #pragma omp teams distribute parallel for simd 53 for (int i = 0; i < argc; ++i) 54 foo(); 55 // expected-warning@+2 {{extra tokens at the end of '#pragma omp teams distribute parallel for simd' are ignored}} 56 #pragma omp target 57 #pragma omp teams distribute parallel for simd unknown() 58 for (int i = 0; i < argc; ++i) 59 foo(); 60 L1: 61 for (int i = 0; i < argc; ++i) 62 foo(); 63 #pragma omp target 64 #pragma omp teams distribute parallel for simd 65 for (int i = 0; i < argc; ++i) 66 foo(); 67 #pragma omp target 68 #pragma omp teams distribute parallel for simd 69 for (int i = 0; i < argc; ++i) { 70 goto L1; // expected-error {{use of undeclared label 'L1'}} 71 argc++; 72 } 73 74 for (int i = 0; i < 10; ++i) { 75 switch (argc) { 76 case (0): 77 #pragma omp target 78 #pragma omp teams distribute parallel for simd 79 for (int i = 0; i < argc; ++i) { 80 foo(); 81 break; // expected-error {{'break' statement cannot be used in OpenMP for loop}} 82 continue; 83 } 84 default: 85 break; 86 } 87 } 88 #pragma omp target 89 #pragma omp teams distribute parallel for simd default(none) // expected-note {{explicit data sharing attribute requested here}} 90 for (int i = 0; i < 10; ++i) 91 ++argc; // expected-error {{ariable 'argc' must have explicitly specified data sharing attributes}} 92 93 goto L2; // expected-error {{use of undeclared label 'L2'}} 94 #pragma omp target 95 #pragma omp teams distribute parallel for simd 96 for (int i = 0; i < argc; ++i) 97 L2: 98 foo(); 99 #pragma omp target 100 #pragma omp teams distribute parallel for simd 101 for (int i = 0; i < argc; ++i) { 102 return 1; // expected-error {{cannot return from OpenMP region}} 103 } 104 105 [[]] // expected-error {{an attribute list cannot appear here}} 106 #pragma omp target 107 #pragma omp teams distribute parallel for simd 108 for (int n = 0; n < 100; ++n) { 109 } 110 111 #pragma omp target 112 #pragma omp teams distribute parallel for simd copyin(pvt) // expected-error {{unexpected OpenMP clause 'copyin' in directive '#pragma omp teams distribute parallel for simd'}} 113 for (int n = 0; n < 100; ++n) {} 114 115 return 0; 116 } 117 118 void test_ordered() { 119 #pragma omp target 120 #pragma omp teams distribute parallel for simd ordered // expected-error {{unexpected OpenMP clause 'ordered' in directive '#pragma omp teams distribute parallel for simd'}} 121 for (int i = 0; i < 16; ++i) 122 ; 123 } 124 125 void test_nontemporal() { 126 int i; 127 #pragma omp target 128 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 129 #pragma omp teams distribute parallel for simd nontemporal( 130 for (i = 0; i < 16; ++i) 131 ; 132 #pragma omp target 133 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 134 #pragma omp teams distribute parallel for simd nontemporal(, 135 for (i = 0; i < 16; ++i) 136 ; 137 #pragma omp target 138 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 2 {{expected expression}} 139 #pragma omp teams distribute parallel for simd nontemporal(, ) 140 for (i = 0; i < 16; ++i) 141 ; 142 #pragma omp target 143 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{expected expression}} 144 #pragma omp teams distribute parallel for simd nontemporal() 145 for (i = 0; i < 16; ++i) 146 ; 147 #pragma omp target 148 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{expected '(' for function-style cast or type construction}} 149 #pragma omp teams distribute parallel for simd nontemporal(int) 150 for (i = 0; i < 16; ++i) 151 ; 152 #pragma omp target 153 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} omp50-error@+1 {{expected variable name}} 154 #pragma omp teams distribute parallel for simd nontemporal(0) 155 for (i = 0; i < 16; ++i) 156 ; 157 #pragma omp target 158 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'x'}} 159 #pragma omp teams distribute parallel for simd nontemporal(x) 160 for (i = 0; i < 16; ++i) 161 ; 162 #pragma omp target 163 // expected-error@+2 {{use of undeclared identifier 'x'}} 164 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'y'}} 165 #pragma omp teams distribute parallel for simd nontemporal(x, y) 166 for (i = 0; i < 16; ++i) 167 ; 168 #pragma omp target 169 // expected-error@+3 {{use of undeclared identifier 'x'}} 170 // expected-error@+2 {{use of undeclared identifier 'y'}} 171 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'z'}} 172 #pragma omp teams distribute parallel for simd nontemporal(x, y, z) 173 for (i = 0; i < 16; ++i) 174 ; 175 176 int x, y; 177 #pragma omp target 178 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 179 #pragma omp teams distribute parallel for simd nontemporal(x :) 180 for (i = 0; i < 16; ++i) 181 ; 182 #pragma omp target 183 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} 184 #pragma omp teams distribute parallel for simd nontemporal(x :, ) 185 for (i = 0; i < 16; ++i) 186 ; 187 188 #pragma omp target 189 // omp50-note@+2 {{defined as nontemporal}} 190 // omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} omp50-error@+1 {{a variable cannot appear in more than one nontemporal clause}} 191 #pragma omp teams distribute parallel for simd nontemporal(x) nontemporal(x) 192 for (i = 0; i < 16; ++i) 193 ; 194 195 #pragma omp target 196 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} 197 #pragma omp teams distribute parallel for simd private(x) nontemporal(x) 198 for (i = 0; i < 16; ++i) 199 ; 200 201 #pragma omp target 202 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} 203 #pragma omp teams distribute parallel for simd nontemporal(x) private(x) 204 for (i = 0; i < 16; ++i) 205 ; 206 207 #pragma omp target 208 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} 209 #pragma omp teams distribute parallel for simd nontemporal(x, y : 0) 210 for (i = 0; i < 16; ++i) 211 ; 212 213 #pragma omp target 214 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} 215 #pragma omp teams distribute parallel for simd nontemporal(x) lastprivate(x) 216 for (i = 0; i < 16; ++i) 217 ; 218 219 #pragma omp target 220 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp teams distribute parallel for simd'}} 221 #pragma omp teams distribute parallel for simd lastprivate(x) nontemporal(x) 222 for (i = 0; i < 16; ++i) 223 ; 224 #pragma omp target 225 #pragma omp teams distribute parallel for simd order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp teams distribute parallel for simd'}} expected-error {{expected '(' after 'order'}} 226 for (int i = 0; i < 10; ++i) 227 ; 228 #pragma omp target 229 #pragma omp teams distribute parallel for simd order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp teams distribute parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} 230 for (int i = 0; i < 10; ++i) 231 ; 232 #pragma omp target 233 #pragma omp teams distribute parallel for simd order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp teams distribute parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} 234 for (int i = 0; i < 10; ++i) 235 ; 236 #pragma omp target 237 #pragma omp teams distribute parallel for simd order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp teams distribute parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} 238 for (int i = 0; i < 10; ++i) 239 ; 240 #pragma omp target 241 #pragma omp teams distribute parallel for simd order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp teams distribute parallel for simd'}} 242 for (int i = 0; i < 10; ++i) 243 ; 244 } 245 246