Clang Project

clang_source_code/test/OpenMP/taskloop_num_tasks_messages.cpp
1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s
2
3// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s
4
5void foo() {
6}
7
8bool foobool(int argc) {
9  return argc;
10}
11
12struct S1; // expected-note {{declared here}}
13
14template <class T, class S> // expected-note {{declared here}}
15int 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)
18    foo();
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)
21    foo();
22  #pragma omp taskloop num_tasks () // expected-error {{expected expression}}
23  for (int i = 0; i < 10; ++i)
24    foo();
25  #pragma omp taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
26  for (int i = 0; i < 10; ++i)
27    foo();
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)
30    foo();
31  #pragma omp taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc])
32  for (int i = 0; i < 10; ++i)
33    foo();
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)
36    foo();
37  #pragma omp taskloop num_tasks (S) // expected-error {{'S' does not refer to a value}}
38  for (int i = 0; i < 10; ++i)
39    foo();
40  #pragma omp taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
41  for (int i = 0; i < 10; ++i)
42    foo();
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)
45    foo();
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)
48    foo();
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)
51    foo();
52
53  return 0;
54}
55
56int 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)
59    foo();
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)
62    foo();
63  #pragma omp taskloop num_tasks () // expected-error {{expected expression}}
64  for (int i = 0; i < 10; ++i)
65    foo();
66  #pragma omp taskloop num_tasks (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
67  for (int i = 0; i < 10; ++i)
68    foo();
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)
71    foo();
72  #pragma omp taskloop num_tasks (argc > 0 ? argv[1][0] : argv[2][argc])
73  for (int i = 0; i < 10; ++i)
74    foo();
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)
77    foo();
78  #pragma omp taskloop num_tasks (S1) // expected-error {{'S1' does not refer to a value}}
79  for (int i = 0; i < 10; ++i)
80    foo();
81  #pragma omp taskloop num_tasks (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
82  for (int i = 0; i < 10; ++i)
83    foo();
84  #pragma omp taskloop num_tasks (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}}
85  for (int i = 0; i < 10; ++i)
86    foo();
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)
89    foo();
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)
92    foo();
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)
95    foo();
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)
98    foo();
99
100  return tmain(argc, argv);
101}
102