1 2 // RUN: %clang_cc1 %s -fopenacc -verify 3 4 typedef struct IsComplete { 5 struct S { int A; } CompositeMember; 6 int ScalarMember; 7 float ArrayMember[5]; 8 void *PointerMember; 9 } Complete; 10 void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { 11 int LocalInt; 12 short *LocalPointer; 13 float LocalArray[5]; 14 Complete LocalComposite; 15 // Check Appertainment: 16 #pragma acc parallel create(LocalInt) 17 while(1); 18 #pragma acc serial create(LocalInt) 19 while(1); 20 #pragma acc kernels create(LocalInt) 21 while(1); 22 23 // expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}} 24 #pragma acc parallel pcreate(LocalInt) 25 while(1); 26 27 // expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}} 28 #pragma acc parallel present_or_create(LocalInt) 29 while(1); 30 31 // Valid cases: 32 #pragma acc parallel create(LocalInt, LocalPointer, LocalArray) 33 while(1); 34 #pragma acc parallel create(LocalArray[2:1]) 35 while(1); 36 #pragma acc parallel create(zero:LocalArray[2:1]) 37 while(1); 38 39 #pragma acc parallel create(LocalComposite.ScalarMember, LocalComposite.ScalarMember) 40 while(1); 41 42 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 43 #pragma acc parallel create(1 + IntParam) 44 while(1); 45 46 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 47 #pragma acc parallel create(+IntParam) 48 while(1); 49 50 // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} 51 #pragma acc parallel create(PointerParam[2:]) 52 while(1); 53 54 // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} 55 #pragma acc parallel create(ArrayParam[2:5]) 56 while(1); 57 58 // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} 59 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 60 #pragma acc parallel create((float*)ArrayParam[2:5]) 61 while(1); 62 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 63 #pragma acc parallel create((float)ArrayParam[2]) 64 while(1); 65 // expected-error@+2{{invalid tag 'invalid' on 'create' clause}} 66 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 67 #pragma acc parallel create(invalid:(float)ArrayParam[2]) 68 while(1); 69 70 // expected-error@+1{{OpenACC 'create' clause is not valid on 'loop' directive}} 71 #pragma acc loop create(LocalInt) 72 for(int i = 5; i < 10;++i); 73 // expected-error@+1{{OpenACC 'pcreate' clause is not valid on 'loop' directive}} 74 #pragma acc loop pcreate(LocalInt) 75 for(int i = 5; i < 10;++i); 76 // expected-error@+1{{OpenACC 'present_or_create' clause is not valid on 'loop' directive}} 77 #pragma acc loop present_or_create(LocalInt) 78 for(int i = 5; i < 10;++i); 79 } 80