xref: /llvm-project/clang/test/OpenMP/error_message.cpp (revision 978e0839ae2feb5ddda3e4e0b5a7ddba1727d2d8)
1 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
2 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
3 
4 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
5 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
6 
7 template <class T>
8 T tmain(T argc) {
9   if (argc)
10 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
11     if (argc) {
12 #pragma omp error // expected-error {{ERROR}}
13     }
14   while (argc)
15 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
16     while (argc) {
17 #pragma omp error // expected-error {{ERROR}}
18     }
19   do
20 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
21     while (argc)
22       ;
23   do {
24 #pragma omp error // expected-error {{ERROR}}
25   } while (argc);
26   switch (argc)
27 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
28     switch (argc)
29     case 1:
30 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
31   switch (argc)
32   case 1: {
33 #pragma omp error // expected-error {{ERROR}}
34   }
35   switch (argc) {
36 #pragma omp error // expected-error {{ERROR}}
37   case 1:
38 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
39     break;
40   default: {
41 #pragma omp error // expected-error {{ERROR}}
42   } break;
43   }
44   for (;;)
45 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
46     for (;;) {
47 #pragma omp error // expected-error {{ERROR}}
48     }
49 label:
50 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
51 label1 : {
52 #pragma omp error // expected-error {{ERROR}}
53 }
54 if (1)
55   label2:
56 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
57 
58 // expected-error@+1 {{ERROR}}
59 #pragma omp error at() // expected-error {{expected 'compilation' or 'execution' in OpenMP clause 'at'}}
60 
61 // expected-error@+1 {{ERROR}}
62 #pragma omp error at(up) // expected-error {{expected 'compilation' or 'execution' in OpenMP clause 'at'}}
63 
64 // expected-error@+3 {{ERROR}}
65 // expected-error@+2 {{expected ')'}}
66 // expected-note@+1 {{to match this '('}}
67 #pragma omp error at(up(a)) // expected-error {{expected 'compilation' or 'execution' in OpenMP clause 'at'}}
68 
69 #pragma omp error at(execution) // no error
70 
71 #pragma omp error at(compilation) // expected-error {{ERROR}}
72 
73 // expected-error@+1 {{ERROR}}
74 #pragma omp error at(compilation) at(execution) //expected-error {{directive '#pragma omp error' cannot contain more than one 'at' clause}}
75 
76 // expected-error@+1 {{ERROR}}
77 #pragma omp error severity() // expected-error {{expected 'fatal' or 'warning' in OpenMP clause 'severity'}}
78 // expected-error@+1 {{ERROR}}
79 #pragma omp error severity(xyz) // expected-error {{expected 'fatal' or 'warning' in OpenMP clause 'severity'}}
80 // expected-error@+1 {{ERROR}}
81 #pragma omp error severity(fatal) severity(warning) // expected-error {{directive '#pragma omp error' cannot contain more than one 'severity' clause}}
82 
83 // expected-error@+1 {{ERROR}}
84 #pragma omp error severity(fatal) severity(fatal) // expected-error {{directive '#pragma omp error' cannot contain more than one 'severity' clause}}
85 
86 // expected-warning@+2 {{WARNING}}
87 // expected-warning@+1 {{WARNING}}
88 #pragma omp error severity(warning) severity(warning) // expected-error {{directive '#pragma omp error' cannot contain more than one 'severity' clause}}
89 
90 // expected-warning@+1 {{WARNING}}
91 #pragma omp error severity(warning) // expected-warning {{WARNING}}
92 #pragma omp error severity(fatal) // expected-error {{ERROR}}
93 
94 // expected-warning@+1 {{WARNING}}
95 #pragma omp error at(compilation) severity(warning) // expected-warning {{WARNING}}
96 #pragma omp error at(execution) severity(warning) // no error, diagnosic at runtime
97 #pragma omp error at(compilation) severity(fatal) // expected-error {{ERROR}}
98 #pragma omp error at(execution) severity(fatal) // no error, error at runtime
99 
100 #pragma omp error message("GPU compiler is needed.") // expected-error {{GPU compiler is needed}}
101 #pragma omp error at(compilation) message("GPU compiler is needed.") // expected-error {{GPU compiler is needed}}
102 #pragma omp error at(execution) message("GPU compiler is needed.") // no error
103 // expected-warning@+1 {{GPU compiler is needed.}}
104 #pragma omp error severity(warning) message("GPU compiler is needed.") // expected-warning {{GPU compiler is needed.}}
105 #pragma omp error severity(fatal) message("GPU compiler is needed.") // expected-error {{GPU compiler is needed}}
106 // expected-warning@+1 {{GPU compiler is needed.}}
107 #pragma omp error at(compilation) severity(warning) message("GPU compiler is needed.") // expected-warning {{GPU compiler is needed.}}
108 #pragma omp error at(compilation) severity(fatal) message("GPU compiler is needed.") // expected-error {{GPU compiler is needed.}}
109 #pragma omp error at(execution) severity(warning) message("GPU compiler is needed.") // no warning warning will emit at runtime.
110 #pragma omp error at(execution) severity(fatal) message("GPU compiler is needed.") // no warning warning will emit at runtime.
111 
112 // expected-error@+1 {{GPU compiler is needed.}}
113 #pragma omp error message("GPU compiler is needed.") message("GPU compiler is needed.") // expected-error {{directive '#pragma omp error' cannot contain more than one 'message' clause}}
114   int a;
115 // expected-warning@+1 {{expected string literal in 'clause message' - ignoring}}
116 #pragma omp error message(a) // expected-error {{ERROR}}
117 // expected-error@+1 {{ERROR}}
118 #pragma omp error message() // expected-error {{expected expression}}
119   return T();
120 }
121 
122 #pragma omp error at(execution) // expected-error {{unexpected 'execution' modifier in non-executable context}}
123 
124 #pragma omp error at(compilation) // expected-error {{ERROR}}
125 class A {
126 
127 #pragma omp error at(compilation) // expected-error {{ERROR}}
128 
129 #pragma omp error at(execution) // expected-error {{unexpected 'execution' modifier in non-executable context}}
130   int A;
131 };
132 
133 int main(int argc, char **argv) {
134 // expected-error@+1 {{ERROR}}
135 #pragma omp error
136   ;
137 // expected-error@+1 {{ERROR}}
138 #pragma omp error untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp error'}}
139   if (argc)
140 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
141     if (argc) {
142 // expected-error@+1 {{ERROR}}
143 #pragma omp error
144     }
145   while (argc)
146 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
147     while (argc) {
148 // expected-error@+1 {{ERROR}}
149 #pragma omp error
150     }
151   do
152 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
153     while (argc)
154       ;
155   do {
156 // expected-error@+1 {{ERROR}}
157 #pragma omp error
158   } while (argc);
159   switch (argc)
160 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
161     switch (argc)
162     case 1:
163 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
164   switch (argc)
165   case 1: {
166 // expected-error@+1 {{ERROR}}
167 #pragma omp error
168   }
169   switch (argc) {
170 // expected-error@+1 {{ERROR}}
171 #pragma omp error
172   case 1:
173 // expected-error@+1 {{'#pragma omp error' cannot be an immediate substatement}}
174 #pragma omp error
175     break;
176   default: {
177 // expected-error@+1 {{ERROR}}
178 #pragma omp error
179   } break;
180   }
181   for (;;)
182 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
183     for (;;) {
184 // expected-error@+1 {{ERROR}}
185 #pragma omp error
186     }
187 label:
188 // expected-error@+1 {{'#pragma omp error' cannot be an immediate substatement}}
189 #pragma omp error
190 label1 : {
191 // expected-error@+1 {{ERROR}}
192 #pragma omp error
193 }
194 if (1)
195   label2:
196 #pragma omp error // expected-error {{'#pragma omp error' cannot be an immediate substatement}}
197 
198   return tmain(argc);// expected-note {{in instantiation of function template specialization 'tmain<int>' requested here}}
199 }
200