Clang Project

clang_source_code/test/OpenMP/distribute_parallel_for_messages.cpp
1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s
2
3// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s
4
5void foo() {
6}
7
8#pragma omp distribute parallel for // expected-error {{unexpected OpenMP directive '#pragma omp distribute parallel for'}}
9
10int main(int argc, char **argv) {
11#pragma omp target
12#pragma omp teams
13#pragma omp distribute parallel for { // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
14  for (int i = 0; i < argc; ++i)
15    foo();
16#pragma omp target
17#pragma omp teams
18#pragma omp distribute parallel for ( // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
19  for (int i = 0; i < argc; ++i)
20    foo();
21#pragma omp target
22#pragma omp teams
23#pragma omp distribute parallel for[ // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
24  for (int i = 0; i < argc; ++i)
25    foo();
26#pragma omp target
27#pragma omp teams
28#pragma omp distribute parallel for] // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
29  for (int i = 0; i < argc; ++i)
30    foo();
31#pragma omp target
32#pragma omp teams
33#pragma omp distribute parallel for) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
34  for (int i = 0; i < argc; ++i)
35    foo();
36#pragma omp target
37#pragma omp teams
38#pragma omp distribute parallel for } // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
39  for (int i = 0; i < argc; ++i)
40    foo();
41#pragma omp target
42#pragma omp teams
43#pragma omp distribute parallel for linear(argc) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp distribute parallel for'}}
44  for (int i = 0; i < argc; ++i)
45    foo();
46#pragma omp target
47#pragma omp teams
48#pragma omp distribute parallel for unknown()   // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}}
49  for (int i = 0; i < argc; ++i)
50    foo();
51L1:
52  for (int i = 0; i < argc; ++i)
53    foo();
54#pragma omp target
55#pragma omp teams
56#pragma omp distribute parallel for
57  for (int i = 0; i < argc; ++i)
58    foo();
59#pragma omp target
60#pragma omp teams
61#pragma omp distribute parallel for
62  for (int i = 0; i < argc; ++i) {
63    goto L1; // expected-error {{use of undeclared label 'L1'}}
64    argc++;
65  }
66
67  for (int i = 0; i < 10; ++i) {
68    switch (argc) {
69    case (0):
70#pragma omp target
71#pragma omp teams
72#pragma omp distribute parallel for
73      for (int i = 0; i < argc; ++i) {
74        foo();
75        break; // expected-error {{'break' statement cannot be used in OpenMP for loop}}
76        continue;
77      }
78    default:
79      break;
80    }
81  }
82#pragma omp target
83#pragma omp teams
84#pragma omp distribute parallel for default(none)
85  for (int i = 0; i < 10; ++i)
86    ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
87
88  goto L2; // expected-error {{use of undeclared label 'L2'}}
89#pragma omp target
90#pragma omp teams
91#pragma omp distribute parallel for
92  for (int i = 0; i < argc; ++i)
93  L2:
94  foo();
95#pragma omp target
96#pragma omp teams
97#pragma omp distribute parallel for
98  for (int i = 0; i < argc; ++i) {
99    return 1; // expected-error {{cannot return from OpenMP region}}
100  }
101
102  [[]] // expected-error {{an attribute list cannot appear here}}
103#pragma omp target
104#pragma omp teams
105#pragma omp distribute parallel for
106      for (int n = 0; n < 100; ++n) {
107  }
108
109  return 0;
110}
111
112void test_ordered() {
113#pragma omp target
114#pragma omp teams
115#pragma omp distribute parallel for collapse(2) collapse(3) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'collapse' clause}}
116  for (int i = 0; i < 16; ++i)
117    for (int j = 0; j < 16; ++j)
118    ;
119}
120
121void test_cancel() {
122#pragma omp target
123#pragma omp teams
124#pragma omp distribute parallel for
125  for (int i = 0; i < 16; ++i)
126    for (int j = 0; j < 16; ++j) {
127#pragma omp cancel for
128    ;
129    }
130}
131
132