1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
5 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp single'}}
8 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp single'}}
11 void test_no_clause() {
20 void test_branch_protected_scope() {
31 goto L1; // expected-error {{use of undeclared label 'L1'}}
33 return; // expected-error {{cannot return from OpenMP region}}
43 goto L2; // expected-error {{use of undeclared label 'L2'}}
48 void test_invalid_clause() {
51 // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
52 #pragma omp single foo bar
56 void test_non_identifiers() {
60 // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
64 // expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp single'}}
65 // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
66 #pragma omp single linear(x);
70 // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
71 #pragma omp single private(x);
75 // expected-warning@+1 {{extra tokens at the end of '#pragma omp single' are ignored}}
76 #pragma omp single, private(x);
83 // expected-error@+2 {{expected expression}}
84 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
85 #pragma omp single private(
88 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
89 // expected-error@+1 2 {{expected expression}}
90 #pragma omp single private(,
93 // expected-error@+1 2 {{expected expression}}
94 #pragma omp single private(, )
97 // expected-error@+1 {{expected expression}}
98 #pragma omp single private()
101 // expected-error@+1 {{expected expression}}
102 #pragma omp single private(int)
105 // expected-error@+1 {{expected variable name}}
106 #pragma omp single private(0)
111 #pragma omp single private(x)
114 #pragma omp single private(x, y)
117 #pragma omp single private(x, y, z)
121 void test_firstprivate() {
124 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
125 // expected-error@+1 {{expected expression}}
126 #pragma omp single firstprivate(
130 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
131 // expected-error@+1 2 {{expected expression}}
132 #pragma omp single firstprivate(,
135 // expected-error@+1 2 {{expected expression}}
136 #pragma omp single firstprivate(, )
139 // expected-error@+1 {{expected expression}}
140 #pragma omp single firstprivate()
143 // expected-error@+1 {{expected expression}}
144 #pragma omp single firstprivate(int)
147 // expected-error@+1 {{expected variable name}}
148 #pragma omp single firstprivate(0)
153 #pragma omp single nowait nowait // expected-error {{directive '#pragma omp single' cannot contain more than one 'nowait' clause}}
154 for (int i = 0; i < 16; ++i)