Files
clang-p2996/clang/test/SemaOpenACC/compute-construct-create-clause.c
erichkeane 01e91a2dde [OpenACC] Implement copyin, copyout, create clauses for compute construct
Like 'copy', these also have alternate names, so this implements that as
well.  Additionally, these have an optional tag of either 'readonly' or
'zero' depending on the clause.

Otherwise, this is a pretty rote implementation of the clause, as there
aren't any special rules for it.
2024-05-03 07:51:25 -07:00

70 lines
2.7 KiB
C

// RUN: %clang_cc1 %s -fopenacc -verify
typedef struct IsComplete {
struct S { int A; } CompositeMember;
int ScalarMember;
float ArrayMember[5];
void *PointerMember;
} Complete;
void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) {
int LocalInt;
short *LocalPointer;
float LocalArray[5];
Complete LocalComposite;
// Check Appertainment:
#pragma acc parallel create(LocalInt)
while(1);
#pragma acc serial create(LocalInt)
while(1);
#pragma acc kernels create(LocalInt)
while(1);
// expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}}
#pragma acc parallel pcreate(LocalInt)
while(1);
// expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}}
#pragma acc parallel present_or_create(LocalInt)
while(1);
// Valid cases:
#pragma acc parallel create(LocalInt, LocalPointer, LocalArray)
while(1);
#pragma acc parallel create(LocalArray[2:1])
while(1);
#pragma acc parallel create(zero:LocalArray[2:1])
while(1);
#pragma acc parallel create(LocalComposite.ScalarMember, LocalComposite.ScalarMember)
while(1);
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}
#pragma acc parallel create(1 + IntParam)
while(1);
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}
#pragma acc parallel create(+IntParam)
while(1);
// expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}}
#pragma acc parallel create(PointerParam[2:])
while(1);
// expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}
#pragma acc parallel create(ArrayParam[2:5])
while(1);
// expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}}
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}
#pragma acc parallel create((float*)ArrayParam[2:5])
while(1);
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}
#pragma acc parallel create((float)ArrayParam[2])
while(1);
// expected-error@+2{{invalid tag 'invalid' on 'create' clause}}
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}
#pragma acc parallel create(invalid:(float)ArrayParam[2])
while(1);
}