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