]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/OpenMP/critical_messages.cpp
Vendor import of clang trunk r238337:
[FreeBSD/FreeBSD.git] / test / OpenMP / critical_messages.cpp
1 // RUN: %clang_cc1 -verify -fopenmp %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 }