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 5 6 #ifndef HEADER 7 #define HEADER 8 9 void foo() {} 10 11 // CHECK: template <typename T, int N> int tmain(T argc, char **argv) 12 // CHECK: static int a; 13 // CHECK-NEXT: #pragma omp critical 14 // CHECK-NEXT: a = 2; 15 // CHECK-NEXT: ++a; 16 // CHECK-NEXT: #pragma omp critical (the_name) hint(N) 17 // CHECK-NEXT: foo(); 18 // CHECK-NEXT: return N; 19 // CHECK: template<> int tmain<int, 4>(int argc, char **argv) 20 template <typename T, int N> 21 int tmain (T argc, char **argv) { 22 T b = argc, c, d, e, f, g; 23 static int a; 24 // CHECK: static int a; 25 #pragma omp critical 26 a=2; 27 // CHECK-NEXT: #pragma omp critical 28 // CHECK-NEXT: a = 2; 29 // CHECK-NEXT: ++a; 30 ++a; 31 #pragma omp critical (the_name) hint(N) 32 foo(); 33 // CHECK-NEXT: #pragma omp critical (the_name) hint(4) 34 // CHECK-NEXT: foo(); 35 // CHECK-NEXT: return 4; 36 return N; 37 } 38 39 int main (int argc, char **argv) { 40 int b = argc, c, d, e, f, g; 41 static int a; 42 // CHECK: static int a; 43 #pragma omp critical 44 a=2; 45 // CHECK-NEXT: #pragma omp critical 46 // CHECK-NEXT: a = 2; 47 // CHECK-NEXT: ++a; 48 ++a; 49 #pragma omp critical (the_name1) hint(23) 50 foo(); 51 // CHECK-NEXT: #pragma omp critical (the_name1) hint(23) 52 // CHECK-NEXT: foo(); 53 // CHECK-NEXT: return tmain<int, 4>(a, argv); 54 return tmain<int, 4>(a, argv); 55 } 56 57 #endif 58