1*d64ba896SFazlay Rabbi // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized 2*d64ba896SFazlay Rabbi 3*d64ba896SFazlay Rabbi // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized 4*d64ba896SFazlay Rabbi foo()5*d64ba896SFazlay Rabbivoid foo() { 6*d64ba896SFazlay Rabbi } 7*d64ba896SFazlay Rabbi foobool(int argc)8*d64ba896SFazlay Rabbibool foobool(int argc) { 9*d64ba896SFazlay Rabbi return argc; 10*d64ba896SFazlay Rabbi } 11*d64ba896SFazlay Rabbi 12*d64ba896SFazlay Rabbi struct S1; // expected-note {{declared here}} 13*d64ba896SFazlay Rabbi 14*d64ba896SFazlay Rabbi template <class T, class S> // expected-note {{declared here}} tmain(T argc,S ** argv)15*d64ba896SFazlay Rabbiint tmain(T argc, S **argv) { 16*d64ba896SFazlay Rabbi T z; 17*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks // expected-error {{expected '(' after 'num_tasks'}} 18*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 19*d64ba896SFazlay Rabbi foo(); 20*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 21*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 22*d64ba896SFazlay Rabbi foo(); 23*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks () // expected-error {{expected expression}} 24*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 25*d64ba896SFazlay Rabbi foo(); 26*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 27*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 28*d64ba896SFazlay Rabbi foo(); 29*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked taskloop' are ignored}} 30*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 31*d64ba896SFazlay Rabbi foo(); 32*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc] + z) 33*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 34*d64ba896SFazlay Rabbi foo(); 35*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (foobool(argc)), num_tasks (true) // expected-error {{directive '#pragma omp parallel masked taskloop' cannot contain more than one 'num_tasks' clause}} 36*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 37*d64ba896SFazlay Rabbi foo(); 38*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (S) // expected-error {{'S' does not refer to a value}} 39*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 40*d64ba896SFazlay Rabbi foo(); 41*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 42*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 43*d64ba896SFazlay Rabbi foo(); 44*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(0) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}} 45*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 46*d64ba896SFazlay Rabbi foo(); 47*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(-1) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}} 48*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 49*d64ba896SFazlay Rabbi foo(); 50*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(argc) grainsize(argc) // expected-error {{'grainsize' and 'num_tasks' clause are mutually exclusive and may not appear on the same directive}} expected-note {{'num_tasks' clause is specified here}} 51*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 52*d64ba896SFazlay Rabbi foo(); 53*d64ba896SFazlay Rabbi 54*d64ba896SFazlay Rabbi return 0; 55*d64ba896SFazlay Rabbi } 56*d64ba896SFazlay Rabbi main(int argc,char ** argv)57*d64ba896SFazlay Rabbiint main(int argc, char **argv) { 58*d64ba896SFazlay Rabbi int z; 59*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks // expected-error {{expected '(' after 'num_tasks'}} 60*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 61*d64ba896SFazlay Rabbi foo(); 62*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 63*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 64*d64ba896SFazlay Rabbi foo(); 65*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks () // expected-error {{expected expression}} 66*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 67*d64ba896SFazlay Rabbi foo(); 68*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 69*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 70*d64ba896SFazlay Rabbi foo(); 71*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked taskloop' are ignored}} 72*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 73*d64ba896SFazlay Rabbi foo(); 74*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc] - z) 75*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 76*d64ba896SFazlay Rabbi foo(); 77*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (foobool(argc)), num_tasks (true) // expected-error {{directive '#pragma omp parallel masked taskloop' cannot contain more than one 'num_tasks' clause}} 78*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 79*d64ba896SFazlay Rabbi foo(); 80*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (S1) // expected-error {{'S1' does not refer to a value}} 81*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 82*d64ba896SFazlay Rabbi foo(); 83*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 84*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 85*d64ba896SFazlay Rabbi foo(); 86*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}} 87*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 88*d64ba896SFazlay Rabbi foo(); 89*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 90*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 91*d64ba896SFazlay Rabbi foo(); 92*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(0) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}} 93*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 94*d64ba896SFazlay Rabbi foo(); 95*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(-1) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}} 96*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 97*d64ba896SFazlay Rabbi foo(); 98*d64ba896SFazlay Rabbi #pragma omp parallel masked taskloop num_tasks(argc) grainsize(argc) // expected-error {{'grainsize' and 'num_tasks' clause are mutually exclusive and may not appear on the same directive}} expected-note {{'num_tasks' clause is specified here}} 99*d64ba896SFazlay Rabbi for (int i = 0; i < 10; ++i) 100*d64ba896SFazlay Rabbi foo(); 101*d64ba896SFazlay Rabbi 102*d64ba896SFazlay Rabbi return tmain(argc, argv); 103*d64ba896SFazlay Rabbi } 104