// 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{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(ArrayPtr[T::value + I:I + 5], T::array[(i + T::value, 5): 6])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(NS::NSArray[NS::NSInt])
  }

  for (int i = 0; i < 10; ++i) {
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(NS::NSArray[NS::NSInt : NS::NSInt])
  }

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

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

  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{use of undeclared identifier 'NSInt'; did you mean 'NS::NSInt'}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #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) {
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(s.array[s.value])
  }
  HasMembersArray Arrs;
  for (int i = 0; i < 10; ++i) {
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3].array[1:4])
  }
  for (int i = 0; i < 10; ++i) {
    // FIXME: Once we have a new array-section type to represent OpenACC as
    // well, change this error message.
    // expected-error@+2{{OpenMP array section is not allowed here}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3:4].array[1:4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{OpenMP array section is not allowed here}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3:4].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+3{{expected ']'}}
    // expected-note@+2{{to match this '['}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3:4:].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{expected expression}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[:].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{expected unqualified-id}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[::].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+4{{expected expression}}
    // expected-error@+3{{expected ']'}}
    // expected-note@+2{{to match this '['}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[: :].array[4])
  }
  for (int i = 0; i < 10; ++i) {
    // expected-error@+2{{expected expression}}
    // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
    #pragma acc cache(Arrs.MemArr[3:].array[4])
  }
  func<S, 5>();
}

