1 // RUN: %clang_cc1 %s -verify -fopenacc 2 3 namespace NS { 4 static char* NSArray;// expected-note{{declared here}} 5 static int NSInt;// expected-note 2{{declared here}} 6 } 7 char *getArrayPtr(); 8 template<typename T, int I> 9 void func() { 10 char *ArrayPtr = getArrayPtr(); 11 for (int i = 0; i < 10; ++i) { 12 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 13 #pragma acc cache(ArrayPtr[T::value + I:I + 5], T::array[(i + T::value, 5): 6]) 14 } 15 for (int i = 0; i < 10; ++i) { 16 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 17 #pragma acc cache(NS::NSArray[NS::NSInt]) 18 } 19 20 for (int i = 0; i < 10; ++i) { 21 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 22 #pragma acc cache(NS::NSArray[NS::NSInt : NS::NSInt]) 23 } 24 25 for (int i = 0; i < 10; ++i) { 26 // expected-error@+2{{use of undeclared identifier 'NSArray'; did you mean 'NS::NSArray'}} 27 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 28 #pragma acc cache(NSArray[NS::NSInt : NS::NSInt]) 29 } 30 31 for (int i = 0; i < 10; ++i) { 32 // expected-error@+2{{use of undeclared identifier 'NSInt'; did you mean 'NS::NSInt'}} 33 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 34 #pragma acc cache(NS::NSArray[NSInt : NS::NSInt]) 35 } 36 37 for (int i = 0; i < 10; ++i) { 38 // expected-error@+2{{use of undeclared identifier 'NSInt'; did you mean 'NS::NSInt'}} 39 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 40 #pragma acc cache(NS::NSArray[NS::NSInt : NSInt]) 41 } 42 } 43 44 struct S { 45 static constexpr int value = 5; 46 static constexpr char array[] ={1,2,3,4,5}; 47 }; 48 49 struct Members { 50 int value = 5; 51 char array[5] ={1,2,3,4,5}; 52 }; 53 struct HasMembersArray { 54 Members MemArr[4]; 55 }; 56 57 58 void use() { 59 60 Members s; 61 for (int i = 0; i < 10; ++i) { 62 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 63 #pragma acc cache(s.array[s.value]) 64 } 65 HasMembersArray Arrs; 66 for (int i = 0; i < 10; ++i) { 67 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 68 #pragma acc cache(Arrs.MemArr[3].array[4]) 69 } 70 for (int i = 0; i < 10; ++i) { 71 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 72 #pragma acc cache(Arrs.MemArr[3].array[1:4]) 73 } 74 for (int i = 0; i < 10; ++i) { 75 // FIXME: Once we have a new array-section type to represent OpenACC as 76 // well, change this error message. 77 // expected-error@+2{{OpenMP array section is not allowed here}} 78 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 79 #pragma acc cache(Arrs.MemArr[3:4].array[1:4]) 80 } 81 for (int i = 0; i < 10; ++i) { 82 // expected-error@+2{{OpenMP array section is not allowed here}} 83 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 84 #pragma acc cache(Arrs.MemArr[3:4].array[4]) 85 } 86 for (int i = 0; i < 10; ++i) { 87 // expected-error@+3{{expected ']'}} 88 // expected-note@+2{{to match this '['}} 89 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 90 #pragma acc cache(Arrs.MemArr[3:4:].array[4]) 91 } 92 for (int i = 0; i < 10; ++i) { 93 // expected-error@+2{{expected expression}} 94 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 95 #pragma acc cache(Arrs.MemArr[:].array[4]) 96 } 97 for (int i = 0; i < 10; ++i) { 98 // expected-error@+2{{expected unqualified-id}} 99 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 100 #pragma acc cache(Arrs.MemArr[::].array[4]) 101 } 102 for (int i = 0; i < 10; ++i) { 103 // expected-error@+4{{expected expression}} 104 // expected-error@+3{{expected ']'}} 105 // expected-note@+2{{to match this '['}} 106 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 107 #pragma acc cache(Arrs.MemArr[: :].array[4]) 108 } 109 for (int i = 0; i < 10; ++i) { 110 // expected-error@+2{{expected expression}} 111 // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} 112 #pragma acc cache(Arrs.MemArr[3:].array[4]) 113 } 114 func<S, 5>(); 115 } 116 117