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