Home | History | Annotate | Download | only in OpenMP
      1 // RUN: %clang_cc1 -verify -fopenmp=libiomp5 %s
      2 
      3 int foo();
      4 
      5 int main() {
      6   #pragma omp critical
      7   ;
      8   #pragma omp critical untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp critical'}}
      9   #pragma omp critical unknown // expected-warning {{extra tokens at the end of '#pragma omp critical' are ignored}}
     10   #pragma omp critical ( // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}}
     11   #pragma omp critical ( + // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}}
     12   #pragma omp critical (name // expected-error {{expected ')'}} expected-note {{to match this '('}}
     13   #pragma omp critical (name1)
     14   foo();
     15   {
     16     #pragma omp critical
     17   } // expected-error {{expected statement}}
     18   #pragma omp critical (name) // expected-note {{previous 'critical' region starts here}}
     19   #pragma omp critical
     20   for (int i = 0; i < 10; ++i) {
     21     foo();
     22     #pragma omp parallel
     23     #pragma omp for
     24     for (int j = 0; j < 10; j++) {
     25       foo();
     26       #pragma omp critical(name) // expected-error {{cannot nest 'critical' regions having the same name 'name'}}
     27       foo();
     28     }
     29   }
     30   #pragma omp critical (name)
     31   #pragma omp critical
     32   for (int i = 0; i < 10; ++i) {
     33     foo();
     34     #pragma omp parallel
     35     #pragma omp for
     36     for (int j = 0; j < 10; j++) {
     37       #pragma omp critical
     38       foo();
     39     }
     40   }
     41   #pragma omp critical (name)
     42   #pragma omp critical
     43   for (int i = 0; i < 10; ++i) {
     44     foo();
     45     #pragma omp parallel
     46     #pragma omp for
     47     for (int j = 0; j < 10; j++) {
     48       #pragma omp critical (nam)
     49       foo();
     50     }
     51   }
     52 
     53   return 0;
     54 }
     55 
     56 int foo() {
     57   L1:
     58     foo();
     59   #pragma omp critical
     60   {
     61     foo();
     62     goto L1; // expected-error {{use of undeclared label 'L1'}}
     63   }
     64   goto L2; // expected-error {{use of undeclared label 'L2'}}
     65   #pragma omp critical
     66   {
     67     L2:
     68     foo();
     69   }
     70 
     71   return 0;
     72 }
     73