brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 6e92ed6 Raw
133 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 loop private(LocalInt)26  for(int i = 0; i < 5; ++i);27 28  // Valid cases:29#pragma acc loop private(LocalInt, LocalPointer, LocalArray)30  for(int i = 0; i < 5; ++i);31#pragma acc loop private(LocalArray)32  for(int i = 0; i < 5; ++i);33#pragma acc loop private(LocalArray[:])34  for(int i = 0; i < 5; ++i);35#pragma acc loop private(LocalArray[:5])36  for(int i = 0; i < 5; ++i);37#pragma acc loop private(LocalArray[2:])38  for(int i = 0; i < 5; ++i);39#pragma acc loop private(LocalArray[2:1])40  for(int i = 0; i < 5; ++i);41#pragma acc loop private(LocalArray[2])42  for(int i = 0; i < 5; ++i);43#pragma acc loop private(LocalComposite)44  for(int i = 0; i < 5; ++i);45#pragma acc loop private(LocalComposite.EnumMember)46  for(int i = 0; i < 5; ++i);47#pragma acc loop private(LocalComposite.ScalarMember)48  for(int i = 0; i < 5; ++i);49#pragma acc loop private(LocalComposite.ArrayMember)50  for(int i = 0; i < 5; ++i);51#pragma acc loop private(LocalComposite.ArrayMember[5])52  for(int i = 0; i < 5; ++i);53#pragma acc loop private(LocalComposite.PointerMember)54  for(int i = 0; i < 5; ++i);55#pragma acc loop private(GlobalInt, GlobalArray, GlobalPointer, GlobalComposite)56  for(int i = 0; i < 5; ++i);57#pragma acc loop private(GlobalArray[2], GlobalPointer[2], GlobalComposite.CompositeMember.A)58  for(int i = 0; i < 5; ++i);59#pragma acc loop private(LocalComposite, GlobalComposite)60  for(int i = 0; i < 5; ++i);61#pragma acc loop private(IntParam, PointerParam, ArrayParam, CompositeParam)62  for(int i = 0; i < 5; ++i);63#pragma acc loop private(PointerParam[IntParam], ArrayParam[IntParam], CompositeParam.CompositeMember.A)64  for(int i = 0; i < 5; ++i);65 66#pragma acc loop private(LocalArray) private(LocalArray[2])67  for(int i = 0; i < 5; ++i);68 69#pragma acc loop private(LocalArray, LocalArray[2])70  for(int i = 0; i < 5; ++i);71 72#pragma acc loop private(LocalComposite, LocalComposite.ScalarMember)73  for(int i = 0; i < 5; ++i);74 75#pragma acc loop private(LocalComposite.CompositeMember.A, LocalComposite.ScalarMember)76  for(int i = 0; i < 5; ++i);77 78#pragma acc loop private(LocalComposite.CompositeMember.A) private(LocalComposite.ScalarMember)79  for(int i = 0; i < 5; ++i);80 81  Complete LocalComposite2;82#pragma acc loop private(LocalComposite2.ScalarMember, LocalComposite2.ScalarMember)83  for(int i = 0; i < 5; ++i);84 85  // Invalid cases, arbitrary expressions.86  struct Incomplete *I;87  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}88#pragma acc loop private(*I)89  for(int i = 0; i < 5; ++i);90  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}91#pragma acc loop private(GlobalInt + IntParam)92  for(int i = 0; i < 5; ++i);93  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}94#pragma acc loop private(+GlobalInt)95  for(int i = 0; i < 5; ++i);96 97  // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}}98#pragma acc loop private(PointerParam[:])99  for(int i = 0; i < 5; ++i);100#pragma acc loop private(PointerParam[:5])101  for(int i = 0; i < 5; ++i);102#pragma acc loop private(PointerParam[:IntParam])103  for(int i = 0; i < 5; ++i);104  // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}}105#pragma acc loop private(PointerParam[2:])106  for(int i = 0; i < 5; ++i);107#pragma acc loop private(PointerParam[2:5])108  for(int i = 0; i < 5; ++i);109#pragma acc loop private(PointerParam[2])110  for(int i = 0; i < 5; ++i);111#pragma acc loop private(ArrayParam[:])112  for(int i = 0; i < 5; ++i);113#pragma acc loop private(ArrayParam[:5])114  for(int i = 0; i < 5; ++i);115#pragma acc loop private(ArrayParam[:IntParam])116  for(int i = 0; i < 5; ++i);117#pragma acc loop private(ArrayParam[2:])118  for(int i = 0; i < 5; ++i);119  // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}120#pragma acc loop private(ArrayParam[2:5])121  for(int i = 0; i < 5; ++i);122#pragma acc loop private(ArrayParam[2])123  for(int i = 0; i < 5; ++i);124 125  // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}126  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}127#pragma acc loop private((float*)ArrayParam[2:5])128  for(int i = 0; i < 5; ++i);129  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}}130#pragma acc loop private((float)ArrayParam[2])131  for(int i = 0; i < 5; ++i);132}133