1// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ferror-limit 100 -std=c++11 -o - %s
2
3void foo() {
4}
5
6#pragma omp parallel sections // expected-error {{unexpected OpenMP directive '#pragma omp parallel sections'}}
7
8int main(int argc, char **argv) {
9#pragma omp parallel sections {// expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
10  {
11    foo();
12  }
13#pragma omp parallel sections( // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
14  {
15    foo();
16  }
17#pragma omp parallel sections[ // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
18  {
19    foo();
20  }
21#pragma omp parallel sections] // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
22  {
23    foo();
24  }
25#pragma omp parallel sections) // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
26  {
27    foo();
28  }
29#pragma omp parallel sections } // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
30  {
31    foo();
32  }
33// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
34#pragma omp parallel sections unknown()
35  {
36    foo();
37#pragma omp section
38  L1:
39    foo();
40  }
41#pragma omp parallel sections
42  {
43    ;
44  }
45#pragma omp parallel sections
46  {
47    goto L1; // expected-error {{use of undeclared label 'L1'}}
48  }
49
50  for (int i = 0; i < 10; ++i) {
51    switch (argc) {
52    case (0):
53#pragma omp parallel sections
54    {
55      foo();
56      break;    // expected-error {{'break' statement not in loop or switch statement}}
57      continue; // expected-error {{'continue' statement not in loop statement}}
58    }
59    default:
60      break;
61    }
62  }
63#pragma omp parallel sections default(none)
64  {
65    ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
66  }
67
68  goto L2; // expected-error {{use of undeclared label 'L2'}}
69#pragma omp parallel sections
70  {
71  L2:
72    foo();
73  }
74#pragma omp parallel sections
75  {
76    return 1; // expected-error {{cannot return from OpenMP region}}
77  }
78
79  [[]] // expected-error {{an attribute list cannot appear here}}
80#pragma omp parallel sections
81  {
82  }
83
84  return 0;
85}
86