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