blob: 6328ec0d7660f986e7d8dbfce09d9c6b59f517d8 [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +00001// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
Alexey Bataev9fb6e642014-07-22 06:45:04 +00004// expected-no-diagnostics
5
6#ifndef HEADER
7#define HEADER
8
9void foo() {}
10
11template <class T>
12T tmain (T argc) {
13 T b = argc, c, d, e, f, g;
14 static T a;
15 #pragma omp for ordered
16 for (int i =0 ; i < argc; ++i)
17 #pragma omp ordered
18 {
19 a=2;
20 }
Alexey Bataev346265e2015-09-25 10:37:12 +000021 #pragma omp for ordered
22 for (int i =0 ; i < argc; ++i)
23 #pragma omp ordered threads
24 {
25 a=2;
26 }
Alexey Bataevd14d1e62015-09-28 06:39:35 +000027 #pragma omp simd
28 for (int i =0 ; i < argc; ++i)
29 #pragma omp ordered simd
30 {
31 a=2;
32 }
33 #pragma omp for simd
34 for (int i =0 ; i < argc; ++i)
35 #pragma omp ordered simd
36 {
37 a=2;
38 }
39 #pragma omp parallel for simd
40 for (int i =0 ; i < argc; ++i)
41 #pragma omp ordered simd
42 {
43 a=2;
44 }
Alexey Bataev9fb6e642014-07-22 06:45:04 +000045 return (0);
46}
47
48// CHECK: static int a;
49// CHECK-NEXT: #pragma omp for ordered
50// CHECK-NEXT: for (int i = 0; i < argc; ++i)
51// CHECK-NEXT: #pragma omp ordered
52// CHECK-NEXT: {
53// CHECK-NEXT: a = 2;
54// CHECK-NEXT: }
Alexey Bataev346265e2015-09-25 10:37:12 +000055// CHECK-NEXT: #pragma omp for ordered
56// CHECK-NEXT: for (int i = 0; i < argc; ++i)
57// CHECK-NEXT: #pragma omp ordered threads
58// CHECK-NEXT: {
59// CHECK-NEXT: a = 2;
60// CHECK-NEXT: }
Alexey Bataevd14d1e62015-09-28 06:39:35 +000061// CHECK-NEXT: #pragma omp simd
62// CHECK-NEXT: for (int i = 0; i < argc; ++i)
63// CHECK-NEXT: #pragma omp ordered simd
64// CHECK-NEXT: {
65// CHECK-NEXT: a = 2;
66// CHECK-NEXT: }
67// CHECK-NEXT: #pragma omp for simd
68// CHECK-NEXT: for (int i = 0; i < argc; ++i)
69// CHECK-NEXT: #pragma omp ordered simd
70// CHECK-NEXT: {
71// CHECK-NEXT: a = 2;
72// CHECK-NEXT: }
73// CHECK-NEXT: #pragma omp parallel for simd
74// CHECK-NEXT: for (int i = 0; i < argc; ++i)
75// CHECK-NEXT: #pragma omp ordered simd
76// CHECK-NEXT: {
77// CHECK-NEXT: a = 2;
78// CHECK-NEXT: }
Alexey Bataev9fb6e642014-07-22 06:45:04 +000079
80// CHECK: static T a;
81// CHECK-NEXT: #pragma omp for ordered
82// CHECK-NEXT: for (int i = 0; i < argc; ++i)
83// CHECK-NEXT: #pragma omp ordered
84// CHECK-NEXT: {
85// CHECK-NEXT: a = 2;
86// CHECK-NEXT: }
Alexey Bataev346265e2015-09-25 10:37:12 +000087// CHECK-NEXT: #pragma omp for ordered
88// CHECK-NEXT: for (int i = 0; i < argc; ++i)
89// CHECK-NEXT: #pragma omp ordered threads
90// CHECK-NEXT: {
91// CHECK-NEXT: a = 2;
92// CHECK-NEXT: }
Alexey Bataevd14d1e62015-09-28 06:39:35 +000093// CHECK-NEXT: #pragma omp simd
94// CHECK-NEXT: for (int i = 0; i < argc; ++i)
95// CHECK-NEXT: #pragma omp ordered simd
96// CHECK-NEXT: {
97// CHECK-NEXT: a = 2;
98// CHECK-NEXT: }
99// CHECK-NEXT: #pragma omp for simd
100// CHECK-NEXT: for (int i = 0; i < argc; ++i)
101// CHECK-NEXT: #pragma omp ordered simd
102// CHECK-NEXT: {
103// CHECK-NEXT: a = 2;
104// CHECK-NEXT: }
105// CHECK-NEXT: #pragma omp parallel for simd
106// CHECK-NEXT: for (int i = 0; i < argc; ++i)
107// CHECK-NEXT: #pragma omp ordered simd
108// CHECK-NEXT: {
109// CHECK-NEXT: a = 2;
110// CHECK-NEXT: }
Alexey Bataev9fb6e642014-07-22 06:45:04 +0000111
112int main (int argc, char **argv) {
113 int b = argc, c, d, e, f, g;
114 static int a;
115// CHECK: static int a;
116 #pragma omp for ordered
117 for (int i =0 ; i < argc; ++i)
118 #pragma omp ordered
119 {
120 a=2;
121 }
Alexey Bataev346265e2015-09-25 10:37:12 +0000122 #pragma omp for ordered
123 for (int i =0 ; i < argc; ++i)
124 #pragma omp ordered threads
125 {
126 a=2;
127 }
Alexey Bataevd14d1e62015-09-28 06:39:35 +0000128 #pragma omp simd
129 for (int i =0 ; i < argc; ++i)
130 #pragma omp ordered simd
131 {
132 a=2;
133 }
134 #pragma omp for simd
135 for (int i =0 ; i < argc; ++i)
136 #pragma omp ordered simd
137 {
138 a=2;
139 }
140 #pragma omp parallel for simd
141 for (int i =0 ; i < argc; ++i)
142 #pragma omp ordered simd
143 {
144 a=2;
145 }
Alexey Bataev9fb6e642014-07-22 06:45:04 +0000146// CHECK-NEXT: #pragma omp for ordered
147// CHECK-NEXT: for (int i = 0; i < argc; ++i)
148// CHECK-NEXT: #pragma omp ordered
149// CHECK-NEXT: {
150// CHECK-NEXT: a = 2;
151// CHECK-NEXT: }
Alexey Bataev346265e2015-09-25 10:37:12 +0000152// CHECK-NEXT: #pragma omp for ordered
153// CHECK-NEXT: for (int i = 0; i < argc; ++i)
154// CHECK-NEXT: #pragma omp ordered threads
155// CHECK-NEXT: {
156// CHECK-NEXT: a = 2;
157// CHECK-NEXT: }
Alexey Bataevd14d1e62015-09-28 06:39:35 +0000158// CHECK-NEXT: #pragma omp simd
159// CHECK-NEXT: for (int i = 0; i < argc; ++i)
160// CHECK-NEXT: #pragma omp ordered simd
161// CHECK-NEXT: {
162// CHECK-NEXT: a = 2;
163// CHECK-NEXT: }
164// CHECK-NEXT: #pragma omp for simd
165// CHECK-NEXT: for (int i = 0; i < argc; ++i)
166// CHECK-NEXT: #pragma omp ordered simd
167// CHECK-NEXT: {
168// CHECK-NEXT: a = 2;
169// CHECK-NEXT: }
170// CHECK-NEXT: #pragma omp parallel for simd
171// CHECK-NEXT: for (int i = 0; i < argc; ++i)
172// CHECK-NEXT: #pragma omp ordered simd
173// CHECK-NEXT: {
174// CHECK-NEXT: a = 2;
175// CHECK-NEXT: }
Alexey Bataev9fb6e642014-07-22 06:45:04 +0000176 return tmain(argc);
177}
178
179#endif