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