// RUN: %clang_cc1 -std=c++11 -verify -fopenmp %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}}
}
