// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -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 -fsyntax-only -verify %s -ast-print | FileCheck %s
// expected-no-diagnostics

#ifndef HEADER
#define HEADER
struct ST {
  int *a;
};
typedef int arr[10];
typedef ST STarr[10];
struct SA {
  const int da[5] = { 0 };
  ST g[10];
  STarr &rg = g;
  int i;
  int &j = i;
  int *k = &j;
  int *&z = k;
  int aa[10];
  arr &raa = aa;
  void func(int arg) {
#pragma omp target teams distribute parallel for simd is_device_ptr(k)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(z)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(aa) // OK
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(raa) // OK
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(g) // OK
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(rg) // OK
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(da) // OK
  for (int i=0; i<100; i++)
    ;
  return;
 }
};
// CHECK: struct SA
// CHECK-NEXT: const int da[5] = {0};
// CHECK-NEXT: ST g[10];
// CHECK-NEXT: STarr &rg = this->g;
// CHECK-NEXT: int i;
// CHECK-NEXT: int &j = this->i;
// CHECK-NEXT: int *k = &this->j;
// CHECK-NEXT: int *&z = this->k;
// CHECK-NEXT: int aa[10];
// CHECK-NEXT: arr &raa = this->aa;
// CHECK-NEXT: func(
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->k)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->z)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->aa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->raa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->g)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->rg)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(this->da)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;

struct SB {
  unsigned A;
  unsigned B;
  float Arr[100];
  float *Ptr;
  float *foo() {
    return &Arr[0];
  }
};

struct SC {
  unsigned A : 2;
  unsigned B : 3;
  unsigned C;
  unsigned D;
  float Arr[100];
  SB S;
  SB ArrS[100];
  SB *PtrS;
  SB *&RPtrS;
  float *Ptr;

  SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
};

union SD {
  unsigned A;
  float B;
};

struct S1;
extern S1 a;
class S2 {
  mutable int a;
public:
  S2():a(0) { }
  S2(S2 &s2):a(s2.a) { }
  static float S2s;
  static const float S2sc;
};
const float S2::S2sc = 0;
const S2 b;
const S2 ba[5];
class S3 {
  int a;
public:
  S3():a(0) { }
  S3(S3 &s3):a(s3.a) { }
};
const S3 c;
const S3 ca[5];
extern const int f;
class S4 {
  int a;
  S4();
  S4(const S4 &s4);
public:
  S4(int v):a(v) { }
};
class S5 {
  int a;
  S5():a(0) {}
  S5(const S5 &s5):a(s5.a) { }
public:
  S5(int v):a(v) { }
};

S3 h;
#pragma omp threadprivate(h)

typedef struct {
  int a;
} S6;

template <typename T>
T tmain(T argc) {
  const T da[5] = { 0 };
  S6 h[10];
  auto &rh = h;
  T i;
  T &j = i;
  T *k = &j;
  T *&z = k;
  T aa[10];
  auto &raa = aa;
#pragma omp target teams distribute parallel for simd is_device_ptr(k)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(z)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(aa)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(raa)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(h)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(rh)
  for (int i=0; i<100; i++)
    ;
#pragma omp target teams distribute parallel for simd is_device_ptr(da)
  for (int i=0; i<100; i++)
    ;
  return 0;
}

// CHECK: template<> int tmain<int>(int argc) {
// CHECK-NEXT: const int da[5] = {0};
// CHECK-NEXT: S6 h[10];
// CHECK-NEXT: auto &rh = h;
// CHECK-NEXT: int i;
// CHECK-NEXT: int &j = i;
// CHECK-NEXT: int *k = &j;
// CHECK-NEXT: int *&z = k;
// CHECK-NEXT: int aa[10];
// CHECK-NEXT: auto &raa = aa;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(k)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(z)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(aa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(raa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(h)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(rh)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(da)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;

// CHECK: template<> int *tmain<int *>(int *argc) {
// CHECK-NEXT: int *const da[5] = {0};
// CHECK-NEXT: S6 h[10];
// CHECK-NEXT: auto &rh = h;
// CHECK-NEXT: int *i;
// CHECK-NEXT: int *&j = i;
// CHECK-NEXT: int **k = &j;
// CHECK-NEXT: int **&z = k;
// CHECK-NEXT: int *aa[10];
// CHECK-NEXT: auto &raa = aa;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(k)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(z)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(aa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(raa)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(h)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(rh)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(da)
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;

// CHECK-LABEL: int main(int argc, char **argv) {
int main(int argc, char **argv) {
  const int da[5] = { 0 };
  S6 h[10];
  auto &rh = h;
  int i;
  int &j = i;
  int *k = &j;
  int *&z = k;
  int aa[10];
  auto &raa = aa;
// CHECK-NEXT: const int da[5] = {0};
// CHECK-NEXT: S6 h[10];
// CHECK-NEXT: auto &rh = h;
// CHECK-NEXT: int i;
// CHECK-NEXT: int &j = i;
// CHECK-NEXT: int *k = &j;
// CHECK-NEXT: int *&z = k;
// CHECK-NEXT: int aa[10];
// CHECK-NEXT: auto &raa = aa;
#pragma omp target teams distribute parallel for simd is_device_ptr(k)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(k)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(z)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(z)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(aa)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(aa)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(raa)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(raa)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(h)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(h)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(rh)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(rh)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
#pragma omp target teams distribute parallel for simd is_device_ptr(da)
// CHECK-NEXT: #pragma omp target teams distribute parallel for simd is_device_ptr(da)
  for (int i=0; i<100; i++)
    ;
// CHECK-NEXT: for (int i = 0; i < 100; i++)
// CHECK-NEXT: ;
  return tmain<int>(argc) + *tmain<int *>(&argc);
}
#endif
