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