1 | // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s |
2 | |
3 | // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s |
4 | |
5 | int main(int argc, char **argv) { |
6 | #pragma omp cancellation // expected-error {{expected an OpenMP directive}} |
7 | #pragma omp cancel // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}} |
8 | ; |
9 | #pragma omp parallel |
10 | { |
11 | #pragma omp cancel // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}} |
12 | } |
13 | #pragma omp cancel parallel untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp cancel'}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
14 | #pragma omp cancel unknown // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}} |
15 | #pragma omp parallel |
16 | { |
17 | #pragma omp cancel unknown // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}} |
18 | } |
19 | #pragma omp cancel sections( // expected-warning {{extra tokens at the end of '#pragma omp cancel' are ignored}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
20 | #pragma omp cancel for, ) // expected-warning {{extra tokens at the end of '#pragma omp cancel' are ignored}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
21 | #pragma omp cancel taskgroup() // expected-warning {{extra tokens at the end of '#pragma omp cancel' are ignored}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
22 | #pragma omp cancel parallel, if // expected-warning {{extra tokens at the end of '#pragma omp cancel' are ignored}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
23 | if (argc) |
24 | #pragma omp cancel for // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
25 | if (argc) { |
26 | #pragma omp taskgroup |
27 | #pragma omp task |
28 | #pragma omp parallel |
29 | { |
30 | #pragma omp cancel taskgroup // expected-error {{region cannot be closely nested inside 'parallel' region}} |
31 | } |
32 | } |
33 | #pragma omp parallel |
34 | #pragma omp taskgroup |
35 | { |
36 | #pragma omp cancel taskgroup // expected-error {{region cannot be closely nested inside 'taskgroup' region}} |
37 | } |
38 | #pragma omp parallel |
39 | { |
40 | #pragma omp cancel for // expected-error {{region cannot be closely nested inside 'parallel' region}} |
41 | } |
42 | #pragma omp task |
43 | { |
44 | #pragma omp cancel sections // expected-error {{region cannot be closely nested inside 'task' region}} |
45 | } |
46 | #pragma omp sections |
47 | { |
48 | #pragma omp cancel parallel allocate(argc) // expected-error {{region cannot be closely nested inside 'sections' region}} expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp cancel'}} |
49 | } |
50 | while (argc) |
51 | #pragma omp cancel for // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
52 | while (argc) { |
53 | #pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
54 | } |
55 | do |
56 | #pragma omp cancel parallel // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
57 | while (argc) |
58 | ; |
59 | do { |
60 | #pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
61 | } while (argc); |
62 | switch (argc) |
63 | #pragma omp cancel parallel // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
64 | switch (argc) |
65 | case 1: |
66 | #pragma omp cancel sections // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
67 | switch (argc) |
68 | case 1: { |
69 | #pragma omp cancel for // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
70 | } |
71 | switch (argc) { |
72 | #pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
73 | case 1: |
74 | #pragma omp cancel parallel // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
75 | break; |
76 | default: { |
77 | #pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
78 | } break; |
79 | } |
80 | for (;;) |
81 | #pragma omp cancel for // expected-error {{'#pragma omp cancel' cannot be an immediate substatement}} expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
82 | for (;;) { |
83 | #pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
84 | } |
85 | label: |
86 | #pragma omp cancel parallel // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
87 | label1 : { |
88 | #pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}} |
89 | } |
90 | |
91 | return 0; |
92 | } |
93 | |
94 | |