xref: /minix3/external/bsd/llvm/dist/clang/test/OpenMP/atomic_ast_print.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ast-print %s | FileCheck %s
2*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -emit-pch -o %t %s
3*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -fopenmp=libiomp5 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4*0a6a1f1dSLionel Sambuc // expected-no-diagnostics
5*0a6a1f1dSLionel Sambuc 
6*0a6a1f1dSLionel Sambuc #ifndef HEADER
7*0a6a1f1dSLionel Sambuc #define HEADER
8*0a6a1f1dSLionel Sambuc 
9*0a6a1f1dSLionel Sambuc template <class T>
foo(T argc)10*0a6a1f1dSLionel Sambuc T foo(T argc) {
11*0a6a1f1dSLionel Sambuc   T b = T();
12*0a6a1f1dSLionel Sambuc   T a = T();
13*0a6a1f1dSLionel Sambuc #pragma omp atomic
14*0a6a1f1dSLionel Sambuc   a++;
15*0a6a1f1dSLionel Sambuc #pragma omp atomic read
16*0a6a1f1dSLionel Sambuc   a = argc;
17*0a6a1f1dSLionel Sambuc #pragma omp atomic write
18*0a6a1f1dSLionel Sambuc   a = argc + argc;
19*0a6a1f1dSLionel Sambuc #pragma omp atomic update
20*0a6a1f1dSLionel Sambuc   a = a + argc;
21*0a6a1f1dSLionel Sambuc #pragma omp atomic capture
22*0a6a1f1dSLionel Sambuc   a = b++;
23*0a6a1f1dSLionel Sambuc #pragma omp atomic capture
24*0a6a1f1dSLionel Sambuc   {
25*0a6a1f1dSLionel Sambuc     a = b;
26*0a6a1f1dSLionel Sambuc     b++;
27*0a6a1f1dSLionel Sambuc   }
28*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst
29*0a6a1f1dSLionel Sambuc   a++;
30*0a6a1f1dSLionel Sambuc #pragma omp atomic read seq_cst
31*0a6a1f1dSLionel Sambuc   a = argc;
32*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst write
33*0a6a1f1dSLionel Sambuc   a = argc + argc;
34*0a6a1f1dSLionel Sambuc #pragma omp atomic update seq_cst
35*0a6a1f1dSLionel Sambuc   a = a + argc;
36*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst capture
37*0a6a1f1dSLionel Sambuc   a = b++;
38*0a6a1f1dSLionel Sambuc #pragma omp atomic capture seq_cst
39*0a6a1f1dSLionel Sambuc   {
40*0a6a1f1dSLionel Sambuc     a = b;
41*0a6a1f1dSLionel Sambuc     b++;
42*0a6a1f1dSLionel Sambuc   }
43*0a6a1f1dSLionel Sambuc   return T();
44*0a6a1f1dSLionel Sambuc }
45*0a6a1f1dSLionel Sambuc 
46*0a6a1f1dSLionel Sambuc // CHECK: int a = int();
47*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic
48*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a++;
49*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic read
50*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc;
51*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic write
52*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc + argc;
53*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic update
54*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = a + argc;
55*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture
56*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b++;
57*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture
58*0a6a1f1dSLionel Sambuc // CHECK-NEXT: {
59*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b;
60*0a6a1f1dSLionel Sambuc // CHECK-NEXT: b++;
61*0a6a1f1dSLionel Sambuc // CHECK-NEXT: }
62*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst
63*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a++;
64*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic read seq_cst
65*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc;
66*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst write
67*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc + argc;
68*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic update seq_cst
69*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = a + argc;
70*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst capture
71*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b++;
72*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture seq_cst
73*0a6a1f1dSLionel Sambuc // CHECK-NEXT: {
74*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b;
75*0a6a1f1dSLionel Sambuc // CHECK-NEXT: b++;
76*0a6a1f1dSLionel Sambuc // CHECK-NEXT: }
77*0a6a1f1dSLionel Sambuc // CHECK: T a = T();
78*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic
79*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a++;
80*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic read
81*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc;
82*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic write
83*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc + argc;
84*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic update
85*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = a + argc;
86*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture
87*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b++;
88*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture
89*0a6a1f1dSLionel Sambuc // CHECK-NEXT: {
90*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b;
91*0a6a1f1dSLionel Sambuc // CHECK-NEXT: b++;
92*0a6a1f1dSLionel Sambuc // CHECK-NEXT: }
93*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst
94*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a++;
95*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic read seq_cst
96*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc;
97*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst write
98*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = argc + argc;
99*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic update seq_cst
100*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = a + argc;
101*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic seq_cst capture
102*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b++;
103*0a6a1f1dSLionel Sambuc // CHECK-NEXT: #pragma omp atomic capture seq_cst
104*0a6a1f1dSLionel Sambuc // CHECK-NEXT: {
105*0a6a1f1dSLionel Sambuc // CHECK-NEXT: a = b;
106*0a6a1f1dSLionel Sambuc // CHECK-NEXT: b++;
107*0a6a1f1dSLionel Sambuc // CHECK-NEXT: }
108*0a6a1f1dSLionel Sambuc 
main(int argc,char ** argv)109*0a6a1f1dSLionel Sambuc int main(int argc, char **argv) {
110*0a6a1f1dSLionel Sambuc   int b = 0;
111*0a6a1f1dSLionel Sambuc   int a = 0;
112*0a6a1f1dSLionel Sambuc // CHECK: int a = 0;
113*0a6a1f1dSLionel Sambuc #pragma omp atomic
114*0a6a1f1dSLionel Sambuc   a++;
115*0a6a1f1dSLionel Sambuc #pragma omp atomic read
116*0a6a1f1dSLionel Sambuc   a = argc;
117*0a6a1f1dSLionel Sambuc #pragma omp atomic write
118*0a6a1f1dSLionel Sambuc   a = argc + argc;
119*0a6a1f1dSLionel Sambuc #pragma omp atomic update
120*0a6a1f1dSLionel Sambuc   a = a + argc;
121*0a6a1f1dSLionel Sambuc #pragma omp atomic capture
122*0a6a1f1dSLionel Sambuc   a = b++;
123*0a6a1f1dSLionel Sambuc #pragma omp atomic capture
124*0a6a1f1dSLionel Sambuc   {
125*0a6a1f1dSLionel Sambuc     a = b;
126*0a6a1f1dSLionel Sambuc     b++;
127*0a6a1f1dSLionel Sambuc   }
128*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst
129*0a6a1f1dSLionel Sambuc   a++;
130*0a6a1f1dSLionel Sambuc #pragma omp atomic read seq_cst
131*0a6a1f1dSLionel Sambuc   a = argc;
132*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst write
133*0a6a1f1dSLionel Sambuc   a = argc + argc;
134*0a6a1f1dSLionel Sambuc #pragma omp atomic update seq_cst
135*0a6a1f1dSLionel Sambuc   a = a + argc;
136*0a6a1f1dSLionel Sambuc #pragma omp atomic seq_cst capture
137*0a6a1f1dSLionel Sambuc   a = b++;
138*0a6a1f1dSLionel Sambuc #pragma omp atomic capture seq_cst
139*0a6a1f1dSLionel Sambuc   {
140*0a6a1f1dSLionel Sambuc     a = b;
141*0a6a1f1dSLionel Sambuc     b++;
142*0a6a1f1dSLionel Sambuc   }
143*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic
144*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a++;
145*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic read
146*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = argc;
147*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic write
148*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = argc + argc;
149*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic update
150*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = a + argc;
151*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic capture
152*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = b++;
153*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic capture
154*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: {
155*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = b;
156*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: b++;
157*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: }
158*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic seq_cst
159*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a++;
160*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic read seq_cst
161*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = argc;
162*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic seq_cst write
163*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = argc + argc;
164*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic update seq_cst
165*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = a + argc;
166*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic seq_cst capture
167*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = b++;
168*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: #pragma omp atomic capture seq_cst
169*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: {
170*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: a = b;
171*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: b++;
172*0a6a1f1dSLionel Sambuc   // CHECK-NEXT: }
173*0a6a1f1dSLionel Sambuc   return foo(a);
174*0a6a1f1dSLionel Sambuc }
175*0a6a1f1dSLionel Sambuc 
176*0a6a1f1dSLionel Sambuc #endif
177