brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · a40d84c Raw
142 lines · c
1// RUN: %clang_cc1 %s -fopenacc -verify2 3struct Incomplete;4enum SomeE{ A };5typedef struct IsComplete {6  struct S { int A; } CompositeMember;7  int ScalarMember;8  float ArrayMember[5];9  enum SomeE EnumMember;10  void *PointerMember;11} Complete;12 13int GlobalInt;14float GlobalArray[5];15short *GlobalPointer;16Complete GlobalComposite;17 18void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) {19  int LocalInt;20  short *LocalPointer;21  float LocalArray[5];22  Complete LocalComposite;23 24  // Check Appertainment:25#pragma acc parallel private(LocalInt)26  while(1);27#pragma acc serial private(LocalInt)28  while(1);29  // expected-error@+1{{OpenACC 'private' clause is not valid on 'kernels' directive}}30#pragma acc kernels private(LocalInt)31  while(1);32 33  // Valid cases:34#pragma acc parallel private(LocalInt, LocalPointer, LocalArray)35  while(1);36#pragma acc parallel private(LocalArray)37  while(1);38#pragma acc parallel private(LocalArray[:])39  while(1);40#pragma acc parallel private(LocalArray[:5])41  while(1);42#pragma acc parallel private(LocalArray[2:])43  while(1);44#pragma acc parallel private(LocalArray[2:1])45  while(1);46#pragma acc parallel private(LocalArray[2])47  while(1);48#pragma acc parallel private(LocalComposite)49  while(1);50#pragma acc parallel private(LocalComposite.EnumMember)51  while(1);52#pragma acc parallel private(LocalComposite.ScalarMember)53  while(1);54#pragma acc parallel private(LocalComposite.ArrayMember)55  while(1);56#pragma acc parallel private(LocalComposite.ArrayMember[5])57  while(1);58#pragma acc parallel private(LocalComposite.PointerMember)59  while(1);60#pragma acc parallel private(GlobalInt, GlobalArray, GlobalPointer, GlobalComposite)61  while(1);62#pragma acc parallel private(GlobalArray[2], GlobalPointer[2], GlobalComposite.CompositeMember.A)63  while(1);64#pragma acc parallel private(LocalComposite, GlobalComposite)65  while(1);66#pragma acc parallel private(IntParam, PointerParam, ArrayParam, CompositeParam)67  while(1);68#pragma acc parallel private(PointerParam[IntParam], ArrayParam[IntParam], CompositeParam.CompositeMember.A)69  while(1);70 71#pragma acc parallel private(LocalArray) private(LocalArray[2])72  while(1);73 74#pragma acc parallel private(LocalArray, LocalArray[2])75  while(1);76 77#pragma acc parallel private(LocalComposite, LocalComposite.ScalarMember)78  while(1);79 80#pragma acc parallel private(LocalComposite.CompositeMember.A, LocalComposite.ScalarMember)81  while(1);82 83#pragma acc parallel private(LocalComposite.CompositeMember.A) private(LocalComposite.ScalarMember)84  while(1);85 86  Complete LocalComposite2;87#pragma acc parallel private(LocalComposite2.ScalarMember, LocalComposite2.ScalarMember)88  while(1);89 90  // Invalid cases, arbitrary expressions.91  struct Incomplete *I;92  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}93#pragma acc parallel private(*I)94  while(1);95  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}96#pragma acc parallel private(GlobalInt + IntParam)97  while(1);98  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}99#pragma acc parallel private(+GlobalInt)100  while(1);101 102  // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}}103#pragma acc parallel private(PointerParam[:])104  while(1);105#pragma acc parallel private(PointerParam[:5])106  while(1);107#pragma acc parallel private(PointerParam[:IntParam])108  while(1);109  // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}}110#pragma acc parallel private(PointerParam[2:])111  while(1);112#pragma acc parallel private(PointerParam[2:5])113  while(1);114#pragma acc parallel private(PointerParam[2])115  while(1);116#pragma acc parallel private(ArrayParam[:])117  while(1);118#pragma acc parallel private(ArrayParam[:5])119  while(1);120#pragma acc parallel private(ArrayParam[:IntParam])121  while(1);122#pragma acc parallel private(ArrayParam[2:])123  while(1);124  // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}125#pragma acc parallel private(ArrayParam[2:5])126  while(1);127#pragma acc parallel private(ArrayParam[2])128  while(1);129 130  // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}131  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}132#pragma acc parallel private((float*)ArrayParam[2:5])133  while(1);134  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}135#pragma acc parallel private((float)ArrayParam[2])136  while(1);137 138  // expected-error@+1{{OpenACC 'private' clause is not valid on 'init' directive}}139#pragma acc init private(LocalInt)140  for(;;);141}142