1 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s
3 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s
8 bool foobool(int argc) {
12 struct S1; // expected-note {{declared here}}
14 template <class T, class S> // expected-note {{declared here}}
15 int tmain(T argc, S **argv) {
16 #pragma omp taskloop num_tasks // expected-error {{expected '(' after 'num_tasks'}}
17 for (int i = 0; i < 10; ++i)
19 #pragma omp taskloop num_tasks ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
20 for (int i = 0; i < 10; ++i)
22 #pragma omp taskloop num_tasks () // expected-error {{expected expression}}
23 for (int i = 0; i < 10; ++i)
25 #pragma omp taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
26 for (int i = 0; i < 10; ++i)
28 #pragma omp taskloop num_tasks (argc)) // expected-warning {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
29 for (int i = 0; i < 10; ++i)
31 #pragma omp taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc])
32 for (int i = 0; i < 10; ++i)
34 #pragma omp taskloop num_tasks (foobool(argc)), num_tasks (true) // expected-error {{directive '#pragma omp taskloop' cannot contain more than one 'num_tasks' clause}}
35 for (int i = 0; i < 10; ++i)
37 #pragma omp taskloop num_tasks (S) // expected-error {{'S' does not refer to a value}}
38 for (int i = 0; i < 10; ++i)
40 #pragma omp taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
41 for (int i = 0; i < 10; ++i)
43 #pragma omp taskloop num_tasks(0) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}}
44 for (int i = 0; i < 10; ++i)
46 #pragma omp taskloop num_tasks(-1) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}}
47 for (int i = 0; i < 10; ++i)
49 #pragma omp 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}}
50 for (int i = 0; i < 10; ++i)
56 int main(int argc, char **argv) {
57 #pragma omp taskloop num_tasks // expected-error {{expected '(' after 'num_tasks'}}
58 for (int i = 0; i < 10; ++i)
60 #pragma omp taskloop num_tasks ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
61 for (int i = 0; i < 10; ++i)
63 #pragma omp taskloop num_tasks () // expected-error {{expected expression}}
64 for (int i = 0; i < 10; ++i)
66 #pragma omp taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
67 for (int i = 0; i < 10; ++i)
69 #pragma omp taskloop num_tasks (argc)) // expected-warning {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
70 for (int i = 0; i < 10; ++i)
72 #pragma omp taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc])
73 for (int i = 0; i < 10; ++i)
75 #pragma omp taskloop num_tasks (foobool(argc)), num_tasks (true) // expected-error {{directive '#pragma omp taskloop' cannot contain more than one 'num_tasks' clause}}
76 for (int i = 0; i < 10; ++i)
78 #pragma omp taskloop num_tasks (S1) // expected-error {{'S1' does not refer to a value}}
79 for (int i = 0; i < 10; ++i)
81 #pragma omp taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
82 for (int i = 0; i < 10; ++i)
84 #pragma omp taskloop num_tasks (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}}
85 for (int i = 0; i < 10; ++i)
87 #pragma omp taskloop num_tasks(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
88 for (int i = 0; i < 10; ++i)
90 #pragma omp taskloop num_tasks(0) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}}
91 for (int i = 0; i < 10; ++i)
93 #pragma omp taskloop num_tasks(-1) // expected-error {{argument to 'num_tasks' clause must be a strictly positive integer value}}
94 for (int i = 0; i < 10; ++i)
96 #pragma omp 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}}
97 for (int i = 0; i < 10; ++i)
100 return tmain(argc, argv);