brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 4baa4ce Raw
121 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -verify2 3struct S {4  int IntMem;5  int *PtrMem;6  operator int*();7};8 9void uses() {10  int LocalInt;11  int *LocalPtr;12  int Array[5];13  int *PtrArray[5];14  struct S s;15 16  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}17#pragma acc parallel loop deviceptr(LocalInt)18  for (int i = 0; i < 5; ++i);19 20#pragma acc parallel loop deviceptr(LocalPtr)21  for (int i = 0; i < 5; ++i);22 23  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}}24#pragma acc parallel loop deviceptr(Array)25  for (int i = 0; i < 5; ++i);26 27  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}28#pragma acc parallel loop deviceptr(Array[0])29  for (int i = 0; i < 5; ++i);30 31  // expected-error@+2{{OpenACC sub-array is not allowed here}}32  // expected-note@+1{{expected variable of pointer type}}33#pragma acc parallel loop deviceptr(Array[0:1])34  for (int i = 0; i < 5; ++i);35 36  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}}37#pragma acc parallel loop deviceptr(PtrArray)38  for (int i = 0; i < 5; ++i);39 40#pragma acc parallel loop deviceptr(PtrArray[0])41  for (int i = 0; i < 5; ++i);42 43  // expected-error@+2{{OpenACC sub-array is not allowed here}}44  // expected-note@+1{{expected variable of pointer type}}45#pragma acc parallel loop deviceptr(PtrArray[0:1])46  for (int i = 0; i < 5; ++i);47 48  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'struct S'}}49#pragma acc parallel loop deviceptr(s)50  for (int i = 0; i < 5; ++i);51 52  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}53#pragma acc parallel loop deviceptr(s.IntMem)54  for (int i = 0; i < 5; ++i);55 56#pragma acc parallel loop deviceptr(s.PtrMem)57  for (int i = 0; i < 5; ++i);58}59 60template<typename T, typename TPtr, typename TStruct, auto &R1>61void Templ() {62  T SomeInt;63  TPtr SomePtr;64  T SomeIntArray[5];65  TPtr SomeIntPtrArray[5];66  TStruct SomeStruct;67 68  // expected-error@+2{{expected pointer in 'deviceptr' clause, type is 'int'}}69  // expected-note@#INST{{in instantiation of function template specialization}}70#pragma acc parallel loop deviceptr(SomeInt)71  for (int i = 0; i < 5; ++i);72 73#pragma acc parallel loop deviceptr(SomePtr)74  for (int i = 0; i < 5; ++i);75 76  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}}77#pragma acc parallel loop deviceptr(SomeIntArray)78  for (int i = 0; i < 5; ++i);79 80  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}81#pragma acc parallel loop deviceptr(SomeIntArray[0])82  for (int i = 0; i < 5; ++i);83 84  // expected-error@+2{{OpenACC sub-array is not allowed here}}85  // expected-note@+1{{expected variable of pointer type}}86#pragma acc parallel loop deviceptr(SomeIntArray[0:1])87  for (int i = 0; i < 5; ++i);88 89  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}}90#pragma acc parallel loop deviceptr(SomeIntPtrArray)91  for (int i = 0; i < 5; ++i);92 93#pragma acc parallel loop deviceptr(SomeIntPtrArray[0])94  for (int i = 0; i < 5; ++i);95 96  // expected-error@+2{{OpenACC sub-array is not allowed here}}97  // expected-note@+1{{expected variable of pointer type}}98#pragma acc parallel loop deviceptr(SomeIntPtrArray[0:1])99  for (int i = 0; i < 5; ++i);100 101  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'S'}}102#pragma acc parallel loop deviceptr(SomeStruct)103  for (int i = 0; i < 5; ++i);104 105  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}106#pragma acc parallel loop deviceptr(SomeStruct.IntMem)107  for (int i = 0; i < 5; ++i);108 109#pragma acc parallel loop deviceptr(SomeStruct.PtrMem)110  for (int i = 0; i < 5; ++i);111 112  // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}}113#pragma acc parallel loop deviceptr(R1)114  for (int i = 0; i < 5; ++i);115}116 117void inst() {118  static constexpr int CEVar = 1;119  Templ<int, int*, S, CEVar>(); // #INST120}121