blob: df6dcdf2ff6194d8d89a7ed1136c46aed6989faa [file] [log] [blame]
Alexey Bataev80909872015-07-02 11:25:17 +00001// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s
2
Alexey Bataeva8a9153a2017-12-29 18:07:07 +00003// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s
4
Alexey Bataev80909872015-07-02 11:25:17 +00005int 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 ;
Jonas Hahnfeld64a9e3c2017-02-22 06:49:10 +00009#pragma omp parallel
10 {
11#pragma omp cancel // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}}
12 }
Alexey Bataev185e88d2019-01-08 15:53:42 +000013#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000014#pragma omp cancel unknown // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}}
Jonas Hahnfeld64a9e3c2017-02-22 06:49:10 +000015#pragma omp parallel
16 {
17#pragma omp cancel unknown // expected-error {{one of 'for', 'parallel', 'sections' or 'taskgroup' is expected}}
18 }
Alexey Bataev185e88d2019-01-08 15:53:42 +000019#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000023 if (argc)
Alexey Bataev185e88d2019-01-08 15:53:42 +000024#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000025 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 {
Alexey Bataeve04483e2019-03-27 14:14:31 +000048#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'}}
Alexey Bataev80909872015-07-02 11:25:17 +000049 }
50 while (argc)
Alexey Bataev185e88d2019-01-08 15:53:42 +000051#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000052 while (argc) {
Alexey Bataev185e88d2019-01-08 15:53:42 +000053#pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000054 }
55 do
Alexey Bataev185e88d2019-01-08 15:53:42 +000056#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000057 while (argc)
58 ;
59 do {
Alexey Bataev185e88d2019-01-08 15:53:42 +000060#pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000061 } while (argc);
62 switch (argc)
Alexey Bataev185e88d2019-01-08 15:53:42 +000063#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000064 switch (argc)
65 case 1:
Richard Smitha6e8d5e2019-02-15 00:27:53 +000066#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000067 switch (argc)
68 case 1: {
Alexey Bataev185e88d2019-01-08 15:53:42 +000069#pragma omp cancel for // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000070 }
71 switch (argc) {
Alexey Bataev185e88d2019-01-08 15:53:42 +000072#pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000073 case 1:
Alexey Bataev185e88d2019-01-08 15:53:42 +000074#pragma omp cancel parallel // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000075 break;
76 default: {
Alexey Bataev185e88d2019-01-08 15:53:42 +000077#pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000078 } break;
79 }
80 for (;;)
Alexey Bataev185e88d2019-01-08 15:53:42 +000081#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?}}
Alexey Bataev80909872015-07-02 11:25:17 +000082 for (;;) {
Alexey Bataev185e88d2019-01-08 15:53:42 +000083#pragma omp cancel taskgroup // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000084 }
85label:
Richard Smitha6e8d5e2019-02-15 00:27:53 +000086#pragma omp cancel parallel // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000087label1 : {
Alexey Bataev185e88d2019-01-08 15:53:42 +000088#pragma omp cancel sections // expected-error {{orphaned 'omp cancel' directives are prohibited; perhaps you forget to enclose the directive into a region?}}
Alexey Bataev80909872015-07-02 11:25:17 +000089}
90
91 return 0;
92}
93