brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 236d504 Raw
103 lines · c
1 2// RUN: %clang_cc1 %s -fopenacc -verify3 4typedef struct IsComplete {5  struct S { int A; } CompositeMember;6  int ScalarMember;7  float ArrayMember[5];8  void *PointerMember;9} Complete;10void 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{{unknown modifier 'invalid' in OpenACC modifier-list 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}80void ModList() {81  int V1;82  // expected-error@+4{{OpenACC 'always' modifier not valid on 'create' clause}}83  // expected-error@+3{{OpenACC 'alwaysin' modifier not valid on 'create' clause}}84  // expected-error@+2{{OpenACC 'alwaysout' modifier not valid on 'create' clause}}85  // expected-error@+1{{OpenACC 'readonly' modifier not valid on 'create' clause}}86#pragma acc parallel create(always, alwaysin, alwaysout, zero, readonly: V1)87  for(int i = 5; i < 10;++i);88  // expected-error@+1{{OpenACC 'always' modifier not valid on 'create' clause}}89#pragma acc serial create(always: V1)90  for(int i = 5; i < 10;++i);91  // expected-error@+1{{OpenACC 'alwaysin' modifier not valid on 'create' clause}}92#pragma acc kernels create(alwaysin: V1)93  for(int i = 5; i < 10;++i);94  // expected-error@+1{{OpenACC 'alwaysout' modifier not valid on 'create' clause}}95#pragma acc parallel create(alwaysout: V1)96  for(int i = 5; i < 10;++i);97  // expected-error@+1{{OpenACC 'readonly' modifier not valid on 'create' clause}}98#pragma acc serial create(readonly: V1)99  for(int i = 5; i < 10;++i);100#pragma acc parallel create(capture:V1)101  for(int i = 5; i < 10;++i);102}103