xref: /llvm-project/clang/test/OpenMP/distribute_parallel_for_messages.cpp (revision 41ebe0ce64bfc5ea208fc391b6dabd39bf670cec)
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