brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · da7b80a Raw
201 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -verify -Wno-empty-body -Wno-unused-value -Wopenacc-extension2 3void HasStmt() {4  {5    // expected-error@+2{{expected statement}}6#pragma acc data default(none)7  }8 9  int I;10  {11    // expected-error@+2{{expected statement}}12#pragma acc host_data use_device(I)13  }14  // Don't have statements, so this is fine.15  {16#pragma acc enter data copyin(I)17  }18  {19#pragma acc exit data copyout(I)20  }21}22 23void AtLeastOneOf() {24  int Var;25  int *VarPtr = &Var;26// Data27#pragma acc data copy(Var)28  ;29#pragma acc data copyin(Var)30  ;31#pragma acc data copyout(Var)32  ;33#pragma acc data create(Var)34  ;35#pragma acc data no_create(Var)36  ;37#pragma acc data present(Var)38  ;39#pragma acc data deviceptr(VarPtr)40  ;41#pragma acc data attach(VarPtr)42  ;43#pragma acc data default(none)44  ;45 46    // expected-error@+1{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}47#pragma acc data if(Var)48  ;49 50    // expected-error@+1{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}51#pragma acc data async52  ;53 54    // expected-error@+1{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}55#pragma acc data wait56  ;57 58    // expected-error@+1{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}59#pragma acc data device_type(*)60  ;61    // expected-error@+1{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}62#pragma acc data63  ;64 65  // Enter Data66#pragma acc enter data copyin(Var)67#pragma acc enter data create(Var)68#pragma acc enter data attach(VarPtr)69 70  // expected-error@+1{{OpenACC 'enter data' construct must have at least one 'attach', 'copyin', or 'create' clause}}71#pragma acc enter data if(Var)72  // expected-error@+1{{OpenACC 'enter data' construct must have at least one 'attach', 'copyin', or 'create' clause}}73#pragma acc enter data async74  // expected-error@+1{{OpenACC 'enter data' construct must have at least one 'attach', 'copyin', or 'create' clause}}75#pragma acc enter data wait76  // expected-error@+1{{OpenACC 'enter data' construct must have at least one 'attach', 'copyin', or 'create' clause}}77#pragma acc enter data78 79  // Exit Data80#pragma acc exit data copyout(Var)81#pragma acc exit data delete(Var)82#pragma acc exit data detach(VarPtr)83 84  // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}85#pragma acc exit data if(Var)86  // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}87#pragma acc exit data async88  // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}89#pragma acc exit data wait90  // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}91#pragma acc exit data finalize92  // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}93#pragma acc exit data94 95  // Host Data96#pragma acc host_data use_device(Var)97  ;98 99  // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}100#pragma acc host_data if(Var)101  ;102  // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}103#pragma acc host_data if_present104  ;105  // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}106#pragma acc host_data107  ;108}109 110void DataRules() {111  int Var;112  // expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'data' construct}}113  // expected-note@+1{{active 'device_type' clause here}}114#pragma acc data default(none) device_type(*) copy(Var)115  ;116  // expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'data' construct}}117  // expected-note@+1{{active 'device_type' clause here}}118#pragma acc data default(none) device_type(*) copyin(Var)119  ;120  // expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'data' construct}}121  // expected-note@+1{{active 'device_type' clause here}}122#pragma acc data default(none) device_type(*) copyout(Var)123  ;124  // expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'data' construct}}125  // expected-note@+1{{active 'device_type' clause here}}126#pragma acc data default(none) device_type(*) create(Var)127  ;128  // expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'data' construct}}129  // expected-note@+1{{active 'device_type' clause here}}130#pragma acc data default(none) device_type(*) no_create(Var)131  ;132  // expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'data' construct}}133  // expected-note@+1{{active 'device_type' clause here}}134#pragma acc data default(none) device_type(*) present(Var)135  ;136  // expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'data' construct}}137  // expected-note@+1{{active 'device_type' clause here}}138#pragma acc data default(none) device_type(*) deviceptr(Var)139  ;140  // expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'data' construct}}141  // expected-note@+1{{active 'device_type' clause here}}142#pragma acc data default(none) device_type(*) attach(Var)143  ;144  // expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'data' construct}}145  // expected-note@+1{{active 'device_type' clause here}}146#pragma acc data default(none) device_type(*) default(none)147  ;148  // expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'data' construct}}149  // expected-note@+1{{active 'device_type' clause here}}150#pragma acc data default(none) device_type(*) if(Var)151  ;152#pragma acc data default(none) device_type(*) async153  ;154#pragma acc data default(none) device_type(*) wait155  ;156}157 158struct HasMembers {159  int Member;160 161  void HostDataError() {162  // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}163#pragma acc host_data use_device(this)164  ;165  // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}166#pragma acc host_data use_device(this->Member)167  ;168#pragma acc host_data use_device(Member)169  ;170  }171};172 173void HostDataRules() {174  int Var, Var2;175  // expected-error@+3{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}176  // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'host_data' directive}}177  // expected-note@+1{{previous 'if' clause is here}}178#pragma acc host_data if(Var) if (Var2)179  ;180 181#pragma acc host_data use_device(Var)182  ;183 184  int Array[5];185#pragma acc host_data use_device(Array)186  ;187 188  // expected-warning@+1{{sub-array as a variable in 'use_device' clause is not a valid variable name or array name}}189#pragma acc host_data use_device(Array[1:1])190  ;191 192  // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}193#pragma acc host_data use_device(Array[1])194  ;195  HasMembers HM;196  // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}197#pragma acc host_data use_device(HM.Member)198  ;199 200}201