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