brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · fe79470 Raw
116 lines · cpp
1// RUN: %clang_cc1 %s -verify -fopenacc2 3namespace NS {4  static char* NSArray; // expected-note {{'NS::NSArray' declared here}}5  static int NSInt;     // expected-note 2 {{'NS::NSInt' declared here}}6}7char *getArrayPtr();8template<typename T, int I>9void func() {10  char *ArrayPtr = getArrayPtr();11#pragma acc loop12  for (int i = 0; i < 10; ++i) {13    // expected-warning@+1{{left operand of comma operator has no effect}}14    #pragma acc cache(ArrayPtr[T::value + I:I + 3], T::array[(T::value, 2): 2])15  }16#pragma acc loop17  for (int i = 0; i < 10; ++i) {18    #pragma acc cache(NS::NSArray[NS::NSInt])19  }20 21#pragma acc loop22  for (int i = 0; i < 10; ++i) {23    #pragma acc cache(NS::NSArray[NS::NSInt : NS::NSInt])24  }25 26#pragma acc loop27  for (int i = 0; i < 10; ++i) {28    // expected-error@+1{{use of undeclared identifier 'NSArray'}}29    #pragma acc cache(NSArray[NS::NSInt : NS::NSInt])30  }31 32#pragma acc loop33  for (int i = 0; i < 10; ++i) {34    // expected-error@+1{{use of undeclared identifier 'NSInt'}}35    #pragma acc cache(NS::NSArray[NSInt : NS::NSInt])36  }37 38#pragma acc loop39  for (int i = 0; i < 10; ++i) {40    // expected-error@+1{{use of undeclared identifier 'NSInt'}}41    #pragma acc cache(NS::NSArray[NS::NSInt : NSInt])42  }43}44 45struct S {46  static constexpr int value = 5;47  static constexpr char array[] ={1,2,3,4,5};48};49 50struct Members {51  int value = 5;52  char array[5] ={1,2,3,4,5};53};54struct HasMembersArray {55  Members MemArr[4];56};57 58 59void use() {60 61  Members s;62#pragma acc loop63  for (int i = 0; i < 10; ++i) {64    #pragma acc cache(s.array[s.value])65  }66  HasMembersArray Arrs;67#pragma acc loop68  for (int i = 0; i < 10; ++i) {69    #pragma acc cache(Arrs.MemArr[3].array[4])70  }71#pragma acc loop72  for (int i = 0; i < 10; ++i) {73    #pragma acc cache(Arrs.MemArr[3].array[1:4])74  }75#pragma acc loop76  for (int i = 0; i < 10; ++i) {77    // expected-error@+1{{OpenACC sub-array is not allowed here}}78    #pragma acc cache(Arrs.MemArr[2:1].array[1:4])79  }80#pragma acc parallel loop81  for (int i = 0; i < 10; ++i) {82    // expected-error@+1{{OpenACC sub-array is not allowed here}}83    #pragma acc cache(Arrs.MemArr[2:1].array[4])84  }85#pragma acc parallel loop86  for (int i = 0; i < 10; ++i) {87    // expected-error@+2{{expected ']'}}88    // expected-note@+1{{to match this '['}}89    #pragma acc cache(Arrs.MemArr[3:4:].array[4])90  }91#pragma acc parallel loop92  for (int i = 0; i < 10; ++i) {93    // expected-error@+1{{OpenACC sub-array is not allowed here}}94    #pragma acc cache(Arrs.MemArr[:].array[4])95  }96#pragma acc parallel loop97  for (int i = 0; i < 10; ++i) {98    // expected-error@+1{{expected unqualified-id}}99    #pragma acc cache(Arrs.MemArr[::].array[4])100  }101#pragma acc parallel loop102  for (int i = 0; i < 10; ++i) {103    // expected-error@+3{{expected expression}}104    // expected-error@+2{{expected ']'}}105    // expected-note@+1{{to match this '['}}106    #pragma acc cache(Arrs.MemArr[: :].array[4])107  }108#pragma acc parallel loop109  for (int i = 0; i < 10; ++i) {110    // expected-error@+1{{OpenACC sub-array is not allowed here}}111    #pragma acc cache(Arrs.MemArr[3:].array[4])112  }113  func<S, 5>(); // expected-note{{in instantiation of function template specialization}}114}115 116