1 // 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
4 // expected-no-diagnostics
15 #pragma omp atomic read
17 #pragma omp atomic write
19 #pragma omp atomic update
21 #pragma omp atomic capture
23 #pragma omp atomic capture
28 #pragma omp atomic seq_cst
30 #pragma omp atomic read seq_cst
32 #pragma omp atomic seq_cst write
34 #pragma omp atomic update seq_cst
36 #pragma omp atomic seq_cst capture
38 #pragma omp atomic capture seq_cst
47 // CHECK-NEXT: #pragma omp atomic
49 // CHECK-NEXT: #pragma omp atomic read
50 // CHECK-NEXT: a = argc;
51 // CHECK-NEXT: #pragma omp atomic write
52 // CHECK-NEXT: a = argc + argc;
53 // CHECK-NEXT: #pragma omp atomic update
54 // CHECK-NEXT: a = a + argc;
55 // CHECK-NEXT: #pragma omp atomic capture
56 // CHECK-NEXT: a = b++;
57 // CHECK-NEXT: #pragma omp atomic capture
62 // CHECK-NEXT: #pragma omp atomic seq_cst
64 // CHECK-NEXT: #pragma omp atomic read seq_cst
65 // CHECK-NEXT: a = argc;
66 // CHECK-NEXT: #pragma omp atomic seq_cst write
67 // CHECK-NEXT: a = argc + argc;
68 // CHECK-NEXT: #pragma omp atomic update seq_cst
69 // CHECK-NEXT: a = a + argc;
70 // CHECK-NEXT: #pragma omp atomic seq_cst capture
71 // CHECK-NEXT: a = b++;
72 // CHECK-NEXT: #pragma omp atomic capture seq_cst
77 // CHECK: int a = int();
78 // CHECK-NEXT: #pragma omp atomic
80 // CHECK-NEXT: #pragma omp atomic read
81 // CHECK-NEXT: a = argc;
82 // CHECK-NEXT: #pragma omp atomic write
83 // CHECK-NEXT: a = argc + argc;
84 // CHECK-NEXT: #pragma omp atomic update
85 // CHECK-NEXT: a = a + argc;
86 // CHECK-NEXT: #pragma omp atomic capture
87 // CHECK-NEXT: a = b++;
88 // CHECK-NEXT: #pragma omp atomic capture
93 // CHECK-NEXT: #pragma omp atomic seq_cst
95 // CHECK-NEXT: #pragma omp atomic read seq_cst
96 // CHECK-NEXT: a = argc;
97 // CHECK-NEXT: #pragma omp atomic seq_cst write
98 // CHECK-NEXT: a = argc + argc;
99 // CHECK-NEXT: #pragma omp atomic update seq_cst
100 // CHECK-NEXT: a = a + argc;
101 // CHECK-NEXT: #pragma omp atomic seq_cst capture
102 // CHECK-NEXT: a = b++;
103 // CHECK-NEXT: #pragma omp atomic capture seq_cst
105 // CHECK-NEXT: a = b;
109 int main(int argc, char **argv) {
115 #pragma omp atomic read
117 #pragma omp atomic write
119 #pragma omp atomic update
121 #pragma omp atomic capture
123 #pragma omp atomic capture
128 #pragma omp atomic seq_cst
130 #pragma omp atomic read seq_cst
132 #pragma omp atomic seq_cst write
134 #pragma omp atomic update seq_cst
136 #pragma omp atomic seq_cst capture
138 #pragma omp atomic capture seq_cst
143 // CHECK-NEXT: #pragma omp atomic
145 // CHECK-NEXT: #pragma omp atomic read
146 // CHECK-NEXT: a = argc;
147 // CHECK-NEXT: #pragma omp atomic write
148 // CHECK-NEXT: a = argc + argc;
149 // CHECK-NEXT: #pragma omp atomic update
150 // CHECK-NEXT: a = a + argc;
151 // CHECK-NEXT: #pragma omp atomic capture
152 // CHECK-NEXT: a = b++;
153 // CHECK-NEXT: #pragma omp atomic capture
155 // CHECK-NEXT: a = b;
158 // CHECK-NEXT: #pragma omp atomic seq_cst
160 // CHECK-NEXT: #pragma omp atomic read seq_cst
161 // CHECK-NEXT: a = argc;
162 // CHECK-NEXT: #pragma omp atomic seq_cst write
163 // CHECK-NEXT: a = argc + argc;
164 // CHECK-NEXT: #pragma omp atomic update seq_cst
165 // CHECK-NEXT: a = a + argc;
166 // CHECK-NEXT: #pragma omp atomic seq_cst capture
167 // CHECK-NEXT: a = b++;
168 // CHECK-NEXT: #pragma omp atomic capture seq_cst
170 // CHECK-NEXT: a = b;