xref: /minix3/external/bsd/llvm/dist/clang/test/OpenMP/single_misc_messages.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc void foo();
4*0a6a1f1dSLionel Sambuc 
5*0a6a1f1dSLionel Sambuc // expected-error@+1 {{unexpected OpenMP directive '#pragma omp single'}}
6*0a6a1f1dSLionel Sambuc #pragma omp single
7*0a6a1f1dSLionel Sambuc 
8*0a6a1f1dSLionel Sambuc // expected-error@+1 {{unexpected OpenMP directive '#pragma omp single'}}
9*0a6a1f1dSLionel Sambuc #pragma omp single foo
10*0a6a1f1dSLionel Sambuc 
test_no_clause()11*0a6a1f1dSLionel Sambuc void test_no_clause() {
12*0a6a1f1dSLionel Sambuc   int i;
13*0a6a1f1dSLionel Sambuc #pragma omp single
14*0a6a1f1dSLionel Sambuc   foo();
15*0a6a1f1dSLionel Sambuc 
16*0a6a1f1dSLionel Sambuc #pragma omp single
17*0a6a1f1dSLionel Sambuc   ++i;
18*0a6a1f1dSLionel Sambuc }
19*0a6a1f1dSLionel Sambuc 
test_branch_protected_scope()20*0a6a1f1dSLionel Sambuc void test_branch_protected_scope() {
21*0a6a1f1dSLionel Sambuc   int i = 0;
22*0a6a1f1dSLionel Sambuc L1:
23*0a6a1f1dSLionel Sambuc   ++i;
24*0a6a1f1dSLionel Sambuc 
25*0a6a1f1dSLionel Sambuc   int x[24];
26*0a6a1f1dSLionel Sambuc 
27*0a6a1f1dSLionel Sambuc #pragma omp parallel
28*0a6a1f1dSLionel Sambuc #pragma omp single
29*0a6a1f1dSLionel Sambuc   {
30*0a6a1f1dSLionel Sambuc     if (i == 5)
31*0a6a1f1dSLionel Sambuc       goto L1; // expected-error {{use of undeclared label 'L1'}}
32*0a6a1f1dSLionel Sambuc     else if (i == 6)
33*0a6a1f1dSLionel Sambuc       return; // expected-error {{cannot return from OpenMP region}}
34*0a6a1f1dSLionel Sambuc     else if (i == 7)
35*0a6a1f1dSLionel Sambuc       goto L2;
36*0a6a1f1dSLionel Sambuc     else if (i == 8) {
37*0a6a1f1dSLionel Sambuc     L2:
38*0a6a1f1dSLionel Sambuc       x[i]++;
39*0a6a1f1dSLionel Sambuc     }
40*0a6a1f1dSLionel Sambuc   }
41*0a6a1f1dSLionel Sambuc 
42*0a6a1f1dSLionel Sambuc   if (x[0] == 0)
43*0a6a1f1dSLionel Sambuc     goto L2; // expected-error {{use of undeclared label 'L2'}}
44*0a6a1f1dSLionel Sambuc   else if (x[1] == 1)
45*0a6a1f1dSLionel Sambuc     goto L1;
46*0a6a1f1dSLionel Sambuc }
47*0a6a1f1dSLionel Sambuc 
test_invalid_clause()48*0a6a1f1dSLionel Sambuc void test_invalid_clause() {
49*0a6a1f1dSLionel Sambuc   int i;
50*0a6a1f1dSLionel Sambuc #pragma omp parallel
51*0a6a1f1dSLionel Sambuc // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
52*0a6a1f1dSLionel Sambuc #pragma omp single foo bar
53*0a6a1f1dSLionel Sambuc   foo();
54*0a6a1f1dSLionel Sambuc }
55*0a6a1f1dSLionel Sambuc 
test_non_identifiers()56*0a6a1f1dSLionel Sambuc void test_non_identifiers() {
57*0a6a1f1dSLionel Sambuc   int i, x;
58*0a6a1f1dSLionel Sambuc 
59*0a6a1f1dSLionel Sambuc #pragma omp parallel
60*0a6a1f1dSLionel Sambuc // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
61*0a6a1f1dSLionel Sambuc #pragma omp single;
62*0a6a1f1dSLionel Sambuc   foo();
63*0a6a1f1dSLionel Sambuc #pragma omp parallel
64*0a6a1f1dSLionel Sambuc // expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp single'}}
65*0a6a1f1dSLionel Sambuc // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
66*0a6a1f1dSLionel Sambuc #pragma omp single linear(x);
67*0a6a1f1dSLionel Sambuc   foo();
68*0a6a1f1dSLionel Sambuc 
69*0a6a1f1dSLionel Sambuc #pragma omp parallel
70*0a6a1f1dSLionel Sambuc // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
71*0a6a1f1dSLionel Sambuc #pragma omp single private(x);
72*0a6a1f1dSLionel Sambuc   foo();
73*0a6a1f1dSLionel Sambuc 
74*0a6a1f1dSLionel Sambuc #pragma omp parallel
75*0a6a1f1dSLionel Sambuc // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
76*0a6a1f1dSLionel Sambuc #pragma omp single, private(x);
77*0a6a1f1dSLionel Sambuc   foo();
78*0a6a1f1dSLionel Sambuc }
79*0a6a1f1dSLionel Sambuc 
test_private()80*0a6a1f1dSLionel Sambuc void test_private() {
81*0a6a1f1dSLionel Sambuc   int i;
82*0a6a1f1dSLionel Sambuc #pragma omp parallel
83*0a6a1f1dSLionel Sambuc // expected-error@+2 {{expected expression}}
84*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
85*0a6a1f1dSLionel Sambuc #pragma omp single private(
86*0a6a1f1dSLionel Sambuc   foo();
87*0a6a1f1dSLionel Sambuc #pragma omp parallel
88*0a6a1f1dSLionel Sambuc // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
89*0a6a1f1dSLionel Sambuc // expected-error@+1 2 {{expected expression}}
90*0a6a1f1dSLionel Sambuc #pragma omp single private(,
91*0a6a1f1dSLionel Sambuc   foo();
92*0a6a1f1dSLionel Sambuc #pragma omp parallel
93*0a6a1f1dSLionel Sambuc // expected-error@+1 2 {{expected expression}}
94*0a6a1f1dSLionel Sambuc #pragma omp single private(, )
95*0a6a1f1dSLionel Sambuc   foo();
96*0a6a1f1dSLionel Sambuc #pragma omp parallel
97*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected expression}}
98*0a6a1f1dSLionel Sambuc #pragma omp single private()
99*0a6a1f1dSLionel Sambuc   foo();
100*0a6a1f1dSLionel Sambuc #pragma omp parallel
101*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected expression}}
102*0a6a1f1dSLionel Sambuc #pragma omp single private(int)
103*0a6a1f1dSLionel Sambuc   foo();
104*0a6a1f1dSLionel Sambuc #pragma omp parallel
105*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected variable name}}
106*0a6a1f1dSLionel Sambuc #pragma omp single private(0)
107*0a6a1f1dSLionel Sambuc   foo();
108*0a6a1f1dSLionel Sambuc 
109*0a6a1f1dSLionel Sambuc   int x, y, z;
110*0a6a1f1dSLionel Sambuc #pragma omp parallel
111*0a6a1f1dSLionel Sambuc #pragma omp single private(x)
112*0a6a1f1dSLionel Sambuc   foo();
113*0a6a1f1dSLionel Sambuc #pragma omp parallel
114*0a6a1f1dSLionel Sambuc #pragma omp single private(x, y)
115*0a6a1f1dSLionel Sambuc   foo();
116*0a6a1f1dSLionel Sambuc #pragma omp parallel
117*0a6a1f1dSLionel Sambuc #pragma omp single private(x, y, z)
118*0a6a1f1dSLionel Sambuc   foo();
119*0a6a1f1dSLionel Sambuc }
120*0a6a1f1dSLionel Sambuc 
test_firstprivate()121*0a6a1f1dSLionel Sambuc void test_firstprivate() {
122*0a6a1f1dSLionel Sambuc   int i;
123*0a6a1f1dSLionel Sambuc #pragma omp parallel
124*0a6a1f1dSLionel Sambuc // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
125*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected expression}}
126*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate(
127*0a6a1f1dSLionel Sambuc   foo();
128*0a6a1f1dSLionel Sambuc 
129*0a6a1f1dSLionel Sambuc #pragma omp parallel
130*0a6a1f1dSLionel Sambuc // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
131*0a6a1f1dSLionel Sambuc // expected-error@+1 2 {{expected expression}}
132*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate(,
133*0a6a1f1dSLionel Sambuc   foo();
134*0a6a1f1dSLionel Sambuc #pragma omp parallel
135*0a6a1f1dSLionel Sambuc // expected-error@+1 2 {{expected expression}}
136*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate(, )
137*0a6a1f1dSLionel Sambuc   foo();
138*0a6a1f1dSLionel Sambuc #pragma omp parallel
139*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected expression}}
140*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate()
141*0a6a1f1dSLionel Sambuc   foo();
142*0a6a1f1dSLionel Sambuc #pragma omp parallel
143*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected expression}}
144*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate(int)
145*0a6a1f1dSLionel Sambuc   foo();
146*0a6a1f1dSLionel Sambuc #pragma omp parallel
147*0a6a1f1dSLionel Sambuc // expected-error@+1 {{expected variable name}}
148*0a6a1f1dSLionel Sambuc #pragma omp single firstprivate(0)
149*0a6a1f1dSLionel Sambuc   foo();
150*0a6a1f1dSLionel Sambuc }
151*0a6a1f1dSLionel Sambuc 
test_nowait()152*0a6a1f1dSLionel Sambuc void test_nowait() {
153*0a6a1f1dSLionel Sambuc #pragma omp single nowait nowait // expected-error {{directive '#pragma omp single' cannot contain more than one 'nowait' clause}}
154*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 16; ++i)
155*0a6a1f1dSLionel Sambuc     ;
156*0a6a1f1dSLionel Sambuc }
157