Clang Project

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