// RUN: %clang_cc1 -std=c++11 -verify -fopenmp %s

// RUN: %clang_cc1 -std=c++11 -verify -fopenmp-simd %s

struct ST {
  int *a;
};
typedef int arr[10];
typedef ST STarr[10];
struct SA {
  const int d = 5;
  const int da[5] = { 0 };
  ST e;
  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 simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(arg // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(k) // OK
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(z) // OK
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(aa) // OK
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(raa) // OK
    for (int ii=0; ii<10; ii++)
      ;   
#pragma omp target simd is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(g) // OK
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(rg) // OK
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    for (int ii=0; ii<10; ii++)
      ;
#pragma omp target simd is_device_ptr(da) // OK
    for (int ii=0; ii<10; ii++)
      ;
  return;
 }
};
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, int I>
T tmain(T argc) {
  const T d = 5;
  const T da[5] = { 0 };
  S4 e(4);
  S5 g(5);
  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 simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(k) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(z) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(aa) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(raa) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(h) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(rh) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(da) // OK
  for (int kk=0; kk<20; kk++)
    ;
  return 0;
}

int main(int argc, char **argv) {
  const int d = 5;
  const int da[5] = { 0 };
  S4 e(4);
  S5 g(5);
  S6 h[10];
  auto &rh = h;
  int i;
  int &j = i;
  int *k = &j;
  int *&z = k;
  int aa[10];
  auto &raa = aa;
#pragma omp target simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(k) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(z) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(aa) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(raa) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(h) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(rh) // OK
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
  for (int kk=0; kk<20; kk++)
    ;
#pragma omp target simd is_device_ptr(da) // OK
  for (int kk=0; kk<20; kk++)
    ;
  return tmain<int, 3>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}}
}
