// RUN: %clang_cc1 %s -verify -fopenacc

namespace NS {
  static char* NSArray;// expected-note{{declared here}}
  static int NSInt;// expected-note 2{{declared here}}
}
char *getArrayPtr();
template<typename T, int I>
void func() {
  char *ArrayPtr = getArrayPtr();
  for (int i = 0; i < 10; ++i) {
    // expected-warning@+1{{left operand of comma operator has no effect}}
    #pragma acc cache(ArrayPtr[T::value + I:I + 3], T::array[(i + T::value, 2): 4])
  }
  for (int i = 0; i < 10; ++i) {
    #pragma acc cache(NS::NSArray[NS::NSInt])
  }

  for (int i = 0; i < 10; ++i) {
    #pragma acc cache(NS::NSArray[NS::NSInt : NS::NSInt])
  }

  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{use of undeclared identifier 'NSArray'; did you mean 'NS::NSArray'}}
    #pragma acc cache(NSArray[NS::NSInt : NS::NSInt])
  }

  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{use of undeclared identifier 'NSInt'; did you mean 'NS::NSInt'}}
    #pragma acc cache(NS::NSArray[NSInt : NS::NSInt])
  }

  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{use of undeclared identifier 'NSInt'; did you mean 'NS::NSInt'}}
    #pragma acc cache(NS::NSArray[NS::NSInt : NSInt])
  }
}

struct S {
  static constexpr int value = 5;
  static constexpr char array[] ={1,2,3,4,5};
};

struct Members {
  int value = 5;
  char array[5] ={1,2,3,4,5};
};
struct HasMembersArray {
  Members MemArr[4];
};


void use() {

  Members s;
  for (int i = 0; i < 10; ++i) {
    #pragma acc cache(s.array[s.value])
  }
  HasMembersArray Arrs;
  for (int i = 0; i < 10; ++i) {
    #pragma acc cache(Arrs.MemArr[3].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    #pragma acc cache(Arrs.MemArr[3].array[1:4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{OpenACC sub-array is not allowed here}}
    #pragma acc cache(Arrs.MemArr[2:1].array[1:4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{OpenACC sub-array is not allowed here}}
    #pragma acc cache(Arrs.MemArr[2:1].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{expected ']'}}
    // expected-note@+1{{to match this '['}}
    #pragma acc cache(Arrs.MemArr[3:4:].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{OpenACC sub-array is not allowed here}}
    #pragma acc cache(Arrs.MemArr[:].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{expected unqualified-id}}
    #pragma acc cache(Arrs.MemArr[::].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+3{{expected expression}}
    // expected-error@+2{{expected ']'}}
    // expected-note@+1{{to match this '['}}
    #pragma acc cache(Arrs.MemArr[: :].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+1{{OpenACC sub-array is not allowed here}}
    #pragma acc cache(Arrs.MemArr[3:].array[4])
  }
  func<S, 5>(); // expected-note{{in instantiation of function template specialization}}
}

