// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s

// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
// expected-no-diagnostics

#ifndef HEADER
#define HEADER

void foo() {}

// CHECK: template <typename T, int N> int tmain(T argc, char **argv)
// CHECK: static int a;
// CHECK-NEXT: #pragma omp critical{{$}}
// CHECK-NEXT: a = argv[0][0];
// CHECK-NEXT: ++a;
// CHECK-NEXT: #pragma omp critical{{$}}
// CHECK-NEXT: {
// CHECK-NEXT: int b = 10;
// CHECK-NEXT: T c = 100;
// CHECK-NEXT: a = b + c;
// CHECK-NEXT: }
// CHECK-NEXT: #pragma omp critical (the_name) hint(N){{$}}
// CHECK-NEXT: foo();
// CHECK-NEXT: return N;
// CHECK: template<> int tmain<int, 4>(int argc, char **argv)
template <typename T, int N>
int tmain(T argc, char **argv) {
  T b = argc, c, d, e, f, g;
  static int a;
// CHECK: static int a;
#pragma omp critical
  a = argv[0][0];
  ++a;
  // CHECK-NEXT: #pragma omp critical
  // CHECK-NEXT: a = argv[0][0];
  // CHECK-NEXT: ++a;
  // CHECK-NEXT: #pragma omp critical{{$}}
  // CHECK-NEXT: {
  // CHECK-NEXT: int b = 10;
  // CHECK-NEXT: int c = 100;
  // CHECK-NEXT: a = b + c;
  // CHECK-NEXT: }
#pragma omp critical
  {
    int b = 10;
    T c = 100;
    a = b + c;
  }
#pragma omp critical(the_name) hint(N)
  foo();
  // CHECK-NEXT: #pragma omp critical (the_name) hint(4)
  // CHECK-NEXT: foo();
  // CHECK-NEXT: return 4;
  return N;
}

int main (int argc, char **argv) {
  int b = argc, c, d, e, f, g;
  static int a;
// CHECK: static int a;
#pragma omp critical
  a=2;
// CHECK-NEXT: #pragma omp critical
// CHECK-NEXT: a = 2;
// CHECK-NEXT: ++a;
  ++a;
#pragma omp critical  (the_name1) hint(23)
  foo();
// CHECK-NEXT: #pragma omp critical (the_name1) hint(23)
// CHECK-NEXT: foo();
// CHECK-NEXT: return tmain<int, 4>(a, argv);
  return tmain<int, 4>(a, argv);
}

#endif
