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