1*67e74705SXin Li // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s 2*67e74705SXin Li 3*67e74705SXin Li template <class T> tmain(T argc)4*67e74705SXin LiT tmain(T argc) { 5*67e74705SXin Li #pragma omp barrier 6*67e74705SXin Li ; 7*67e74705SXin Li #pragma omp barrier untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}} 8*67e74705SXin Li #pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}} 9*67e74705SXin Li if (argc) 10*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 11*67e74705SXin Li if (argc) { 12*67e74705SXin Li #pragma omp barrier 13*67e74705SXin Li } 14*67e74705SXin Li while (argc) 15*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 16*67e74705SXin Li while (argc) { 17*67e74705SXin Li #pragma omp barrier 18*67e74705SXin Li } 19*67e74705SXin Li do 20*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 21*67e74705SXin Li while (argc) 22*67e74705SXin Li ; 23*67e74705SXin Li do { 24*67e74705SXin Li #pragma omp barrier 25*67e74705SXin Li } while (argc); 26*67e74705SXin Li switch (argc) 27*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 28*67e74705SXin Li switch (argc) 29*67e74705SXin Li case 1: 30*67e74705SXin Li #pragma omp barrier 31*67e74705SXin Li switch (argc) 32*67e74705SXin Li case 1: { 33*67e74705SXin Li #pragma omp barrier 34*67e74705SXin Li } 35*67e74705SXin Li switch (argc) { 36*67e74705SXin Li #pragma omp barrier 37*67e74705SXin Li case 1: 38*67e74705SXin Li #pragma omp barrier 39*67e74705SXin Li break; 40*67e74705SXin Li default: { 41*67e74705SXin Li #pragma omp barrier 42*67e74705SXin Li } break; 43*67e74705SXin Li } 44*67e74705SXin Li for (;;) 45*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 46*67e74705SXin Li for (;;) { 47*67e74705SXin Li #pragma omp barrier 48*67e74705SXin Li } 49*67e74705SXin Li label: 50*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 51*67e74705SXin Li label1 : { 52*67e74705SXin Li #pragma omp barrier 53*67e74705SXin Li } 54*67e74705SXin Li 55*67e74705SXin Li return T(); 56*67e74705SXin Li } 57*67e74705SXin Li main(int argc,char ** argv)58*67e74705SXin Liint main(int argc, char **argv) { 59*67e74705SXin Li #pragma omp barrier 60*67e74705SXin Li ; 61*67e74705SXin Li #pragma omp barrier untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}} 62*67e74705SXin Li #pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}} 63*67e74705SXin Li if (argc) 64*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 65*67e74705SXin Li if (argc) { 66*67e74705SXin Li #pragma omp barrier 67*67e74705SXin Li } 68*67e74705SXin Li while (argc) 69*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 70*67e74705SXin Li while (argc) { 71*67e74705SXin Li #pragma omp barrier 72*67e74705SXin Li } 73*67e74705SXin Li do 74*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 75*67e74705SXin Li while (argc) 76*67e74705SXin Li ; 77*67e74705SXin Li do { 78*67e74705SXin Li #pragma omp barrier 79*67e74705SXin Li } while (argc); 80*67e74705SXin Li switch (argc) 81*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 82*67e74705SXin Li switch (argc) 83*67e74705SXin Li case 1: 84*67e74705SXin Li #pragma omp barrier 85*67e74705SXin Li switch (argc) 86*67e74705SXin Li case 1: { 87*67e74705SXin Li #pragma omp barrier 88*67e74705SXin Li } 89*67e74705SXin Li switch (argc) { 90*67e74705SXin Li #pragma omp barrier 91*67e74705SXin Li case 1: 92*67e74705SXin Li #pragma omp barrier 93*67e74705SXin Li break; 94*67e74705SXin Li default: { 95*67e74705SXin Li #pragma omp barrier 96*67e74705SXin Li } break; 97*67e74705SXin Li } 98*67e74705SXin Li for (;;) 99*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 100*67e74705SXin Li for (;;) { 101*67e74705SXin Li #pragma omp barrier 102*67e74705SXin Li } 103*67e74705SXin Li label: 104*67e74705SXin Li #pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}} 105*67e74705SXin Li label1 : { 106*67e74705SXin Li #pragma omp barrier 107*67e74705SXin Li } 108*67e74705SXin Li 109*67e74705SXin Li return tmain(argc); 110*67e74705SXin Li } 111