| // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized | 
 |  | 
 | // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized | 
 |  | 
 | template <class T> | 
 | T tmain(T argc) { | 
 | #pragma omp taskwait allocate(argc) // expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp taskwait'}} | 
 |   ; | 
 | #pragma omp taskwait untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp taskwait'}} | 
 | #pragma omp taskwait unknown // expected-warning {{extra tokens at the end of '#pragma omp taskwait' are ignored}} | 
 |   if (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     if (argc) { | 
 | #pragma omp taskwait | 
 |     } | 
 |   while (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     while (argc) { | 
 | #pragma omp taskwait | 
 |     } | 
 |   do | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     while (argc) | 
 |       ; | 
 |   do { | 
 | #pragma omp taskwait | 
 |   } while (argc); | 
 |   switch (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     switch (argc) | 
 |     case 1: | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |   switch (argc) | 
 |   case 1: { | 
 | #pragma omp taskwait | 
 |   } | 
 |   switch (argc) { | 
 | #pragma omp taskwait | 
 |   case 1: | 
 | #pragma omp taskwait | 
 |     break; | 
 |   default: { | 
 | #pragma omp taskwait | 
 |   } break; | 
 |   } | 
 |   for (;;) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     for (;;) { | 
 | #pragma omp taskwait | 
 |     } | 
 | label: | 
 | #pragma omp taskwait | 
 | label1 : { | 
 | #pragma omp taskwait | 
 | } | 
 |  | 
 |   return T(); | 
 | } | 
 |  | 
 | int main(int argc, char **argv) { | 
 | #pragma omp taskwait | 
 |   ; | 
 | #pragma omp taskwait untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp taskwait'}} | 
 | #pragma omp taskwait unknown // expected-warning {{extra tokens at the end of '#pragma omp taskwait' are ignored}} | 
 |   if (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     if (argc) { | 
 | #pragma omp taskwait | 
 |     } | 
 |   while (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     while (argc) { | 
 | #pragma omp taskwait | 
 |     } | 
 |   do | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     while (argc) | 
 |       ; | 
 |   do { | 
 | #pragma omp taskwait | 
 |   } while (argc); | 
 |   switch (argc) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     switch (argc) | 
 |     case 1: | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |   switch (argc) | 
 |   case 1: { | 
 | #pragma omp taskwait | 
 |   } | 
 |   switch (argc) { | 
 | #pragma omp taskwait | 
 |   case 1: | 
 | #pragma omp taskwait | 
 |     break; | 
 |   default: { | 
 | #pragma omp taskwait | 
 |   } break; | 
 |   } | 
 |   for (;;) | 
 | #pragma omp taskwait // expected-error {{'#pragma omp taskwait' cannot be an immediate substatement}} | 
 |     for (;;) { | 
 | #pragma omp taskwait | 
 |     } | 
 | label: | 
 | #pragma omp taskwait | 
 | label1 : { | 
 | #pragma omp taskwait | 
 | } | 
 |  | 
 |   return tmain(argc); | 
 | } |