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