brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.4 KiB · 70dc3d6 Raw
314 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -verify2 3struct CompositeOfScalars {4  int I;5  float F; // #COS_FLOAT6  short J;7  char C;8  double D;9};10 11struct CompositeHasComposite {12  int I;13  float F;14  short J;15  char C;16  double D;17  struct CompositeOfScalars COS; // #COS_FIELD18};19 20void uses(unsigned Parm) {21  float Var;22  int IVar;23 24#pragma acc parallel reduction(+:Parm)25  while (1);26#pragma acc serial reduction(+:Parm)27  while (1);28  // expected-error@+1{{OpenACC 'reduction' clause is not valid on 'kernels' directive}}29#pragma acc kernels reduction(+:Parm)30  while (1);31 32  // On a 'parallel', 'num_gangs' cannot have >1 args. num_gangs not valid on33  // 'serial', but 'reduction' not valid on 'kernels', other combos cannot be34  // tested.35#pragma acc parallel reduction(+:Parm) num_gangs(IVar)36  while (1);37#pragma acc parallel num_gangs(IVar) reduction(+:Var)38  while (1);39 40  // expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel' construct with a 'reduction' clause}}41  // expected-note@+1{{previous 'reduction' clause is here}}42#pragma acc parallel reduction(+:Parm) num_gangs(Parm, IVar)43  while (1);44 45  // expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel' construct with a 'num_gangs' clause with more than 1 argument}}46  // expected-note@+1{{previous 'num_gangs' clause is here}}47#pragma acc parallel num_gangs(Parm, IVar) reduction(+:Var)48  while (1);49 50#pragma acc parallel reduction(+:Parm) reduction(+:Parm)51  while (1);52 53  struct CompositeOfScalars CoS;54  struct CompositeOfScalars *CoSPtr;55  struct CompositeHasComposite ChC;56  struct CompositeHasComposite *ChCPtr;57 58  int I;59  float F;60  int Array[5];61 62  // Vars in a reduction must be a scalar or a composite of scalars.63#pragma acc parallel reduction(&: CoS, I, F)64  // expected-error@-1{{variable of type 'float' referenced in OpenACC 'reduction' clause does not have a valid operation available}}65  // expected-note@-2{{while forming binary operator '&='}}66  // expected-error@-3{{invalid operands to binary expression ('float' and 'float')}}67  // expected-error@-4{{variable of type 'float' referenced in OpenACC 'reduction' clause does not have a valid operation available}}68  // expected-note@#COS_FLOAT{{while forming combiner for compound type 'CompositeOfScalars'}}69  // expected-note@-6{{while forming binary operator '&='}}70  // expected-error@-7{{invalid operands to binary expression ('float' and 'float')}}71  while (1);72  // expected-error@+3{{invalid type 'struct CompositeOfScalars' used in OpenACC 'reduction' variable reference; type is not a scalar value}}73  // expected-note@#COS_FIELD{{used as field 'COS' of composite 'CompositeHasComposite'}}74  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}75#pragma acc parallel reduction(&: ChC)76  while (1);77#pragma acc parallel reduction(&: Array)78  while (1);79 80#pragma acc parallel reduction(&: CoS, Array[I], Array[0:I])81  // expected-error@-1{{variable of type 'float' referenced in OpenACC 'reduction' clause does not have a valid operation available}}82  // expected-note@#COS_FLOAT{{while forming combiner for compound type 'CompositeOfScalars'}}83  // expected-note@-3{{while forming binary operator '&='}}84  // expected-error@-4{{invalid operands to binary expression ('float' and 'float')}}85  while (1);86 87  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}88#pragma acc parallel reduction(&: CoS.I)89  while (1);90 91  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}92#pragma acc parallel reduction(&: CoSPtr->I)93 94  while (1);95  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}96#pragma acc parallel reduction(&: ChC.COS)97  while (1);98 99  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}100#pragma acc parallel reduction(&: ChCPtr->COS)101  while (1);102 103  CompositeHasComposite CoCArr[5];104  // expected-error@+4{{invalid type 'struct CompositeOfScalars' used in OpenACC 'reduction' variable reference; type is not a scalar value}}105  // expected-note@+3{{used as element type of array type 'CompositeHasComposite[5]'}}106  // expected-note@#COS_FIELD{{used as field 'COS' of composite 'CompositeHasComposite'}}107  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}108#pragma acc parallel reduction(+:CoCArr)109  while (1);110  // expected-error@+3{{invalid type 'struct CompositeOfScalars' used in OpenACC 'reduction' variable reference; type is not a scalar value}}111  // expected-note@#COS_FIELD{{used as field 'COS' of composite 'CompositeHasComposite'}}112  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}113#pragma acc parallel reduction(+:CoCArr[3])114  while (1);115  // expected-error@+3{{invalid type 'struct CompositeOfScalars' used in OpenACC 'reduction' variable reference; type is not a scalar value}}116  // expected-note@#COS_FIELD{{used as field 'COS' of composite 'CompositeHasComposite'}}117  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}118#pragma acc parallel reduction(+:CoCArr[1:1])119  while (1);120 121  int *IPtr;122  // expected-error@+2{{invalid type 'int *' used in OpenACC 'reduction' variable reference; type is not a scalar value, or array of scalars, or composite of scalars}}123  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}124#pragma acc parallel reduction(+:IPtr)125  while (1);126#pragma acc parallel reduction(+:IPtr[1])127  while (1);128#pragma acc parallel reduction(+:IPtr[1:1])129  while (1);130 131  int *IPtrArr[5];132  // expected-error@+3{{invalid type 'int *' used in OpenACC 'reduction' variable reference; type is not a scalar value, or array of scalars, or composite of scalars}}133  // expected-note@+2{{used as element type of array type 'int *[5]'}}134  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}135#pragma acc parallel reduction(+:IPtrArr)136  while (1);137 138  struct HasPtr { int *I; }; // #HASPTR139  HasPtr HP;140  // expected-error@+3{{invalid type 'int *' used in OpenACC 'reduction' variable reference; type is not a scalar value}}141  // expected-note@#HASPTR{{used as field 'I' of composite 'HasPtr'}}142  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}143#pragma acc parallel reduction(+:HP)144  while (1);145 146  HasPtr HPArr[5];147  // expected-error@+4{{invalid type 'int *' used in OpenACC 'reduction' variable reference; type is not a scalar value}}148  // expected-note@+3{{used as element type of array type 'HasPtr[5]'}}149  // expected-note@#HASPTR{{used as field 'I' of composite 'HasPtr'}}150  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}151#pragma acc parallel reduction(+:HPArr)152  while (1);153 154  _Complex int CplxI;155  _Complex int CplxIArr[5];156  _Complex float CplxF;157  _Complex float CplxFArr[5];158  struct HasCplx { _Complex int I; } HC; //#HASCPLX159  // expected-error@+2{{invalid type '_Complex int' used in OpenACC 'reduction' variable reference; type is not a scalar value}}160  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}161#pragma acc parallel reduction(+:CplxI)162  while (1);163  // expected-error@+3{{invalid type '_Complex int' used in OpenACC 'reduction' variable reference; type is not a scalar value}}164  // expected-note@+2{{used as element type of array type '_Complex int[5]'}}165  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}166#pragma acc parallel reduction(+:CplxIArr)167  while (1);168  // expected-error@+2{{invalid type '_Complex float' used in OpenACC 'reduction' variable reference; type is not a scalar value}}169  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}170#pragma acc parallel reduction(+:CplxF)171  while (1);172  // expected-error@+3{{invalid type '_Complex float' used in OpenACC 'reduction' variable reference; type is not a scalar value}}173  // expected-note@+2{{used as element type of array type '_Complex float[5]'}}174  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}175#pragma acc parallel reduction(+:CplxFArr)176  while (1);177  // expected-error@+3{{invalid type '_Complex int' used in OpenACC 'reduction' variable reference; type is not a scalar value}}178  // expected-note@#HASCPLX{{used as field 'I' of composite 'HasCplx'}}179  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}180#pragma acc parallel reduction(+:HC)181  while (1);182}183 184template<typename T, typename U, typename V>185void TemplUses(T Parm, U CoS, V ChC) {186  T Var;187  U *CoSPtr;188  V *ChCPtr;189 190#pragma acc parallel reduction(+:Parm)191  while (1);192#pragma acc serial reduction(+:Parm)193  while (1);194  // expected-error@+1{{OpenACC 'reduction' clause is not valid on 'kernels' directive}}195#pragma acc kernels reduction(+:Parm)196  while (1);197 198  // On a 'parallel', 'num_gangs' cannot have >1 args. num_gangs not valid on199  // 'serial', but 'reduction' not valid on 'kernels', other combos cannot be200  // tested.201#pragma acc parallel reduction(+:Parm) num_gangs(Var)202  while (1);203#pragma acc parallel num_gangs(Var) reduction(+:Var)204  while (1);205 206  // expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel' construct with a 'reduction' clause}}207  // expected-note@+1{{previous 'reduction' clause is here}}208#pragma acc parallel reduction(+:Parm) num_gangs(Parm, Var)209  while (1);210 211  // expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel' construct with a 'num_gangs' clause with more than 1 argument}}212  // expected-note@+1{{previous 'num_gangs' clause is here}}213#pragma acc parallel num_gangs(Parm, Var) reduction(+:Var)214  while (1);215 216#pragma acc parallel reduction(+:Parm) reduction(+:Parm)217  while (1);218 219  int NonDep;220  int NonDepArray[5];221  T Array[5];222 223  // Vars in a reduction must be a scalar or a composite of scalars.224#pragma acc parallel reduction(&: CoS, Var, Parm)225  // expected-error@-1{{variable of type 'float' referenced in OpenACC 'reduction' clause does not have a valid operation available}}226  // expected-note@#COS_FLOAT{{while forming combiner for compound type 'CompositeOfScalars'}}227  // expected-note@-3{{while forming binary operator '&='}}228  // expected-error@-4{{invalid operands to binary expression ('float' and 'float')}}229  while (1);230  // expected-error@+3{{invalid type 'struct CompositeOfScalars' used in OpenACC 'reduction' variable reference; type is not a scalar value}}231  // expected-note@#COS_FIELD{{used as field 'COS' of composite 'CompositeHasComposite'}}232  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}233#pragma acc parallel reduction(&: ChC)234  while (1);235#pragma acc parallel reduction(&: Array)236  while (1);237#pragma acc parallel reduction(&: NonDepArray)238  while (1);239 240#pragma acc parallel reduction(&: CoS, Array[Var], Array[0:Var])241  // expected-error@-1{{variable of type 'float' referenced in OpenACC 'reduction' clause does not have a valid operation available}}242  // expected-note@#COS_FLOAT{{while forming combiner for compound type 'CompositeOfScalars'}}243  // expected-note@-3{{while forming binary operator '&='}}244  // expected-error@-4{{invalid operands to binary expression ('float' and 'float')}}245  while (1);246 247  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}248#pragma acc parallel reduction(&: CoS.I)249  while (1);250 251  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}252#pragma acc parallel reduction(&: CoSPtr->I)253 254  while (1);255  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}256#pragma acc parallel reduction(&: ChC.COS)257  while (1);258 259  // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}}260#pragma acc parallel reduction(&: ChCPtr->COS)261  while (1);262 263  T ThreeDArray[3][4][5];264 265  // expected-error@+3{{invalid type 'int[4][5]' used in OpenACC 'reduction' variable reference; type is not a scalar value}}266  // expected-note@+2{{used as element type of array type 'int[3][4][5]'}}267  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}268#pragma acc parallel reduction(+:ThreeDArray)269  while (1);270  // expected-error@+3{{invalid type 'int[5]' used in OpenACC 'reduction' variable reference; type is not a scalar value}}271  // expected-note@+2{{used as element type of array type 'int[4][5]'}}272  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}273#pragma acc parallel reduction(+:ThreeDArray[1:1])274  while (1);275  // expected-error@+3{{invalid type 'int[5]' used in OpenACC 'reduction' variable reference; type is not a scalar value}}276  // expected-note@+2{{used as element type of array type 'int[4][5]'}}277  // expected-note@+1{{OpenACC 'reduction' variable reference must be a scalar variable or a composite of scalars, or an array, sub-array, or element of scalar types}}278#pragma acc parallel reduction(+:ThreeDArray[1])279  while (1);280 281#pragma acc parallel reduction(+:ThreeDArray[1:1][1])282  while (1);283#pragma acc parallel reduction(+:ThreeDArray[1:1][1:1])284  while (1);285#pragma acc parallel reduction(+:ThreeDArray[1][1])286  while (1);287#pragma acc parallel reduction(+:ThreeDArray[1][1:1])288  while (1);289 290#pragma acc parallel reduction(+:ThreeDArray[1:1][1][1:1])291  while (1);292#pragma acc parallel reduction(+:ThreeDArray[1:1][1][1])293  while (1);294#pragma acc parallel reduction(+:ThreeDArray[1:1][1:1][1:1])295  while (1);296#pragma acc parallel reduction(+:ThreeDArray[1:1][1:1][1])297  while (1);298#pragma acc parallel reduction(+:ThreeDArray[1][1][1:1])299  while (1);300#pragma acc parallel reduction(+:ThreeDArray[1][1][1])301  while (1);302#pragma acc parallel reduction(+:ThreeDArray[1][1:1][1:1])303  while (1);304#pragma acc parallel reduction(+:ThreeDArray[1][1:1][1])305  while (1);306}307 308void inst() {309  CompositeOfScalars CoS;310  CompositeHasComposite ChC;311  // expected-note@+1{{in instantiation of function template specialization}}312  TemplUses(5, CoS, ChC);313}314