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