1 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ferror-limit 100 %s 2 3 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ferror-limit 100 %s 4 5 void foo() { 6 } 7 8 bool foobool(int argc) { 9 return argc; 10 } 11 12 struct S1; // expected-note {{declared here}} 13 14 template <class T, class S> // expected-note {{declared here}} 15 int tmain(T argc, S **argv) { 16 T i; 17 #pragma omp target 18 #pragma omp teams 19 #pragma omp distribute parallel for simd if // expected-error {{expected '(' after 'if'}} 20 for (i = 0; i < argc; ++i) foo(); 21 #pragma omp target 22 #pragma omp teams 23 #pragma omp distribute parallel for simd if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 24 for (i = 0; i < argc; ++i) foo(); 25 #pragma omp target 26 #pragma omp teams 27 #pragma omp distribute parallel for simd if () // expected-error {{expected expression}} 28 for (i = 0; i < argc; ++i) foo(); 29 #pragma omp target 30 #pragma omp teams 31 #pragma omp distribute parallel for simd if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 32 for (i = 0; i < argc; ++i) foo(); 33 #pragma omp target 34 #pragma omp teams 35 #pragma omp distribute parallel for simd if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} 36 for (i = 0; i < argc; ++i) foo(); 37 #pragma omp target 38 #pragma omp teams 39 #pragma omp distribute parallel for simd if (argc > 0 ? argv[1] : argv[2]) 40 for (i = 0; i < argc; ++i) foo(); 41 #pragma omp target 42 #pragma omp teams 43 #pragma omp distribute parallel for simd if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'if' clause}} 44 for (i = 0; i < argc; ++i) foo(); 45 #pragma omp target 46 #pragma omp teams 47 #pragma omp distribute parallel for simd if (S) // expected-error {{'S' does not refer to a value}} 48 for (i = 0; i < argc; ++i) foo(); 49 #pragma omp target 50 #pragma omp teams 51 #pragma omp distribute parallel for simd if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 52 for (i = 0; i < argc; ++i) foo(); 53 #pragma omp target 54 #pragma omp teams 55 #pragma omp distribute parallel for simd if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 56 for (i = 0; i < argc; ++i) foo(); 57 #pragma omp target 58 #pragma omp teams 59 #pragma omp distribute parallel for simd if(argc) 60 for (i = 0; i < argc; ++i) foo(); 61 #pragma omp target 62 #pragma omp teams 63 #pragma omp distribute parallel for simd if(parallel // expected-error {{use of undeclared identifier 'parallel'}} expected-error {{expected ')'}} expected-note {{to match this '('}} 64 for (i = 0; i < argc; ++i) foo(); 65 #pragma omp target 66 #pragma omp teams 67 #pragma omp distribute parallel for simd if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 68 for (i = 0; i < argc; ++i) foo(); 69 #pragma omp target 70 #pragma omp teams 71 #pragma omp distribute parallel for simd if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 72 for (i = 0; i < argc; ++i) foo(); 73 #pragma omp target 74 #pragma omp teams 75 #pragma omp distribute parallel for simd if(parallel : argc) 76 for (i = 0; i < argc; ++i) foo(); 77 #pragma omp target 78 #pragma omp teams 79 #pragma omp distribute parallel for simd if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp distribute parallel for simd'}} 80 for (i = 0; i < argc; ++i) foo(); 81 #pragma omp target 82 #pragma omp teams 83 #pragma omp distribute parallel for simd if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'if' clause with 'parallel' name modifier}} 84 for (i = 0; i < argc; ++i) foo(); 85 #pragma omp target 86 #pragma omp teams 87 #pragma omp distribute parallel for simd if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 88 for (i = 0; i < argc; ++i) foo(); 89 #pragma omp target 90 #pragma omp teams 91 #pragma omp distribute parallel for simd if(distribute : argc) // expected-error {{directive name modifier 'distribute' is not allowed for '#pragma omp distribute parallel for simd'}} 92 for (i = 0; i < argc; ++i) foo(); 93 94 return 0; 95 } 96 97 int main(int argc, char **argv) { 98 int i; 99 #pragma omp target 100 #pragma omp teams 101 #pragma omp distribute parallel for simd if // expected-error {{expected '(' after 'if'}} 102 for (i = 0; i < argc; ++i) foo(); 103 #pragma omp target 104 #pragma omp teams 105 #pragma omp distribute parallel for simd if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 106 for (i = 0; i < argc; ++i) foo(); 107 #pragma omp target 108 #pragma omp teams 109 #pragma omp distribute parallel for simd if () // expected-error {{expected expression}} 110 for (i = 0; i < argc; ++i) foo(); 111 #pragma omp target 112 #pragma omp teams 113 #pragma omp distribute parallel for simd if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 114 for (i = 0; i < argc; ++i) foo(); 115 #pragma omp target 116 #pragma omp teams 117 #pragma omp distribute parallel for simd if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} 118 for (i = 0; i < argc; ++i) foo(); 119 #pragma omp target 120 #pragma omp teams 121 #pragma omp distribute parallel for simd if (argc > 0 ? argv[1] : argv[2]) 122 for (i = 0; i < argc; ++i) foo(); 123 #pragma omp target 124 #pragma omp teams 125 #pragma omp distribute parallel for simd if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'if' clause}} 126 for (i = 0; i < argc; ++i) foo(); 127 #pragma omp target 128 #pragma omp teams 129 #pragma omp distribute parallel for simd if (S1) // expected-error {{'S1' does not refer to a value}} 130 for (i = 0; i < argc; ++i) foo(); 131 #pragma omp target 132 #pragma omp teams 133 #pragma omp distribute parallel for simd if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 134 for (i = 0; i < argc; ++i) foo(); 135 #pragma omp target 136 #pragma omp teams 137 #pragma omp distribute parallel for simd if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 138 for (i = 0; i < argc; ++i) foo(); 139 #pragma omp target 140 #pragma omp teams 141 #pragma omp distribute parallel for simd if (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}} 142 for (i = 0; i < argc; ++i) foo(); 143 #pragma omp target 144 #pragma omp teams 145 #pragma omp distribute parallel for simd if(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 146 for (i = 0; i < argc; ++i) foo(); 147 #pragma omp target 148 #pragma omp teams 149 #pragma omp distribute parallel for simd if(parallel // expected-error {{use of undeclared identifier 'parallel'}} expected-error {{expected ')'}} expected-note {{to match this '('}} 150 for (i = 0; i < argc; ++i) foo(); 151 #pragma omp target 152 #pragma omp teams 153 #pragma omp distribute parallel for simd if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 154 for (i = 0; i < argc; ++i) foo(); 155 #pragma omp target 156 #pragma omp teams 157 #pragma omp distribute parallel for simd if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 158 for (i = 0; i < argc; ++i) foo(); 159 #pragma omp target 160 #pragma omp teams 161 #pragma omp distribute parallel for simd if(parallel : argc) 162 for (i = 0; i < argc; ++i) foo(); 163 #pragma omp target 164 #pragma omp teams 165 #pragma omp distribute parallel for simd if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp distribute parallel for simd'}} 166 for (i = 0; i < argc; ++i) foo(); 167 #pragma omp target 168 #pragma omp teams 169 #pragma omp distribute parallel for simd if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'if' clause with 'parallel' name modifier}} 170 for (i = 0; i < argc; ++i) foo(); 171 #pragma omp target 172 #pragma omp teams 173 #pragma omp distribute parallel for simd if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 174 for (i = 0; i < argc; ++i) foo(); 175 #pragma omp target 176 #pragma omp teams 177 #pragma omp distribute parallel for simd if(distribute : argc) // expected-error {{directive name modifier 'distribute' is not allowed for '#pragma omp distribute parallel for simd'}} 178 for (i = 0; i < argc; ++i) foo(); 179 180 return tmain(argc, argv); 181 } 182