blob: ff98e2cbdd3efdb877125f2c1f7e96adde6e8445 [file] [log] [blame]
Alexey Bataeva9148882019-07-08 15:45:24 +00001// RUN: %clang_cc1 -verify -fopenmp -std=c++11 %s -Wuninitialized
Kelvin Lia579b912016-07-14 02:54:56 +00002
Alexey Bataeva9148882019-07-08 15:45:24 +00003// RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 %s -Wuninitialized
Alexey Bataeva8a9153a2017-12-29 18:07:07 +00004
Alexey Bataevc2c21ef2019-07-11 14:54:17 +00005void xxx(int argc) {
6 int x; // expected-note {{initialize the variable 'x' to silence this warning}}
7#pragma omp target parallel for simd
8 for (int i = 0; i < 10; ++i)
9 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
10}
11
Kelvin Lia579b912016-07-14 02:54:56 +000012void foo() {
13}
14
15static int pvt;
16#pragma omp threadprivate(pvt)
17
18#pragma omp target parallel for simd // expected-error {{unexpected OpenMP directive '#pragma omp target parallel for simd'}}
19
20int main(int argc, char **argv) {
21#pragma omp target parallel for simd { // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
22 for (int i = 0; i < argc; ++i)
23 foo();
24#pragma omp target parallel for simd ( // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
25 for (int i = 0; i < argc; ++i)
26 foo();
27#pragma omp target parallel for simd[ // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
28 for (int i = 0; i < argc; ++i)
29 foo();
30#pragma omp target parallel for simd] // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
31 for (int i = 0; i < argc; ++i)
32 foo();
33#pragma omp target parallel for simd) // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
34 for (int i = 0; i < argc; ++i)
35 foo();
36#pragma omp target parallel for simd } // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
37 for (int i = 0; i < argc; ++i)
38 foo();
39#pragma omp target parallel for simd
40 for (int i = 0; i < argc; ++i)
41 foo();
42// expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
43#pragma omp target parallel for simd unknown()
44 for (int i = 0; i < argc; ++i)
45 foo();
46L1:
47 for (int i = 0; i < argc; ++i)
48 foo();
49#pragma omp target parallel for simd
50 for (int i = 0; i < argc; ++i)
51 foo();
52#pragma omp target parallel for simd
53 for (int i = 0; i < argc; ++i) {
54 goto L1; // expected-error {{use of undeclared label 'L1'}}
55 argc++;
56 }
57
58 for (int i = 0; i < 10; ++i) {
59 switch (argc) {
60 case (0):
61#pragma omp target parallel for simd
62 for (int i = 0; i < argc; ++i) {
63 foo();
64 break; // expected-error {{'break' statement cannot be used in OpenMP for loop}}
65 continue;
66 }
67 default:
68 break;
69 }
70 }
Alexey Bataev41ebe0c2019-05-09 18:14:57 +000071#pragma omp target parallel for simd default(none) // expected-note {{explicit data sharing attribute requested here}}
Kelvin Lia579b912016-07-14 02:54:56 +000072 for (int i = 0; i < 10; ++i)
73 ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
74
75 goto L2; // expected-error {{use of undeclared label 'L2'}}
76#pragma omp target parallel for simd
77 for (int i = 0; i < argc; ++i)
78 L2:
79 foo();
80#pragma omp target parallel for simd
81 for (int i = 0; i < argc; ++i) {
82 return 1; // expected-error {{cannot return from OpenMP region}}
83 }
84
85 [[]] // expected-error {{an attribute list cannot appear here}}
86#pragma omp target parallel for simd
87 for (int n = 0; n < 100; ++n) {
88 }
89
90#pragma omp target parallel for simd copyin(pvt) // expected-error {{unexpected OpenMP clause 'copyin' in directive '#pragma omp target parallel for simd'}}
91 for (int n = 0; n < 100; ++n) {}
92
93 return 0;
94}
95
96void test_ordered() {
97#pragma omp target parallel for simd ordered ordered // expected-error {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}}
98 for (int i = 0; i < 16; ++i)
99 ;
100}
101