1*67e74705SXin Li // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3*67e74705SXin Li // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4*67e74705SXin Li // expected-no-diagnostics
5*67e74705SXin Li
6*67e74705SXin Li #ifndef HEADER
7*67e74705SXin Li #define HEADER
8*67e74705SXin Li
foo()9*67e74705SXin Li void foo() {}
10*67e74705SXin Li
11*67e74705SXin Li // CHECK: template <typename T, int N> int tmain(T argc, char **argv)
12*67e74705SXin Li template <typename T, int N>
tmain(T argc,char ** argv)13*67e74705SXin Li int tmain (T argc, char **argv) {
14*67e74705SXin Li T b = argc, c, d, e, f, g;
15*67e74705SXin Li static int a;
16*67e74705SXin Li // CHECK: static int a;
17*67e74705SXin Li #pragma omp critical
18*67e74705SXin Li a=2;
19*67e74705SXin Li // CHECK-NEXT: #pragma omp critical
20*67e74705SXin Li // CHECK-NEXT: a = 2;
21*67e74705SXin Li // CHECK-NEXT: ++a;
22*67e74705SXin Li ++a;
23*67e74705SXin Li #pragma omp critical (the_name) hint(N)
24*67e74705SXin Li foo();
25*67e74705SXin Li // CHECK-NEXT: #pragma omp critical (the_name) hint(N)
26*67e74705SXin Li // CHECK-NEXT: foo();
27*67e74705SXin Li // CHECK-NEXT: return N;
28*67e74705SXin Li return N;
29*67e74705SXin Li }
30*67e74705SXin Li
main(int argc,char ** argv)31*67e74705SXin Li int main (int argc, char **argv) {
32*67e74705SXin Li int b = argc, c, d, e, f, g;
33*67e74705SXin Li static int a;
34*67e74705SXin Li // CHECK: static int a;
35*67e74705SXin Li #pragma omp critical
36*67e74705SXin Li a=2;
37*67e74705SXin Li // CHECK-NEXT: #pragma omp critical
38*67e74705SXin Li // CHECK-NEXT: a = 2;
39*67e74705SXin Li // CHECK-NEXT: ++a;
40*67e74705SXin Li ++a;
41*67e74705SXin Li #pragma omp critical (the_name1) hint(23)
42*67e74705SXin Li foo();
43*67e74705SXin Li // CHECK-NEXT: #pragma omp critical (the_name1) hint(23)
44*67e74705SXin Li // CHECK-NEXT: foo();
45*67e74705SXin Li // CHECK-NEXT: return tmain<int, 4>(a, argv);
46*67e74705SXin Li return tmain<int, 4>(a, argv);
47*67e74705SXin Li }
48*67e74705SXin Li
49*67e74705SXin Li #endif
50