brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 38eb4e4 Raw
295 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -verify2 3struct ImplicitCtorDtor{};4 5struct ImplDeletedCtor{6  ImplDeletedCtor(int i);7};8 9struct DefaultedCtor {10  DefaultedCtor() = default;11};12 13struct ImpledCtor {14  ImpledCtor();15};16 17 18struct DeletedCtor {19  DeletedCtor() = delete;20  DeletedCtor(int i);21};22 23struct ImpledDtor {24  ~ImpledDtor();25};26 27struct DefaultedDtor {28  ~DefaultedDtor() = default;29};30 31struct DeletedDtor {32  ~DeletedDtor() = delete;33};34 35struct ImplicitDelDtor {36  DeletedDtor d;37};38 39struct DeletedCopy {40  DeletedCopy();41  DeletedCopy(const DeletedCopy&) = delete;42};43 44struct DefaultedCopy {45  DefaultedCopy();46  DefaultedCopy(const DefaultedCopy&) = default;47};48struct UserCopy {49  UserCopy();50  UserCopy(const UserCopy&);51};52 53void private_uses(ImplicitCtorDtor &CDT, ImplDeletedCtor &IDC,54                  DefaultedCtor &DefC, ImpledCtor &IC, DeletedCtor &DelC,55                  ImpledDtor &ID, DefaultedDtor &DefD, DeletedDtor &DelD,56                  ImplicitDelDtor &IDD) {57 58#pragma acc parallel private(CDT)59  ;60 61  // expected-error@+1{{variable of type 'ImplDeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}62#pragma acc parallel private(IDC)63  ;64 65#pragma acc parallel private(DefC)66  ;67 68#pragma acc parallel private(IC)69  ;70 71  // expected-error@+1{{variable of type 'DeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}72#pragma acc parallel private(DelC)73  ;74 75#pragma acc parallel private(ID)76  ;77 78#pragma acc parallel private(DefD)79  ;80 81  // expected-error@+1{{variable of type 'DeletedDtor' referenced in OpenACC 'private' clause does not have a}}82#pragma acc parallel private(DelD)83  ;84 85  // expected-error@+1{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'private' clause does not have a destructor; reference has no effect}}86#pragma acc parallel private(IDD)87  ;88 89}90 91template<typename T>92void private_templ(T& t) {93#pragma acc parallel private(t) // #PRIV94  ;95}96 97void inst(ImplicitCtorDtor &CDT, ImplDeletedCtor &IDC,98                  DefaultedCtor &DefC, ImpledCtor &IC, DeletedCtor &DelC,99                  ImpledDtor &ID, DefaultedDtor &DefD, DeletedDtor &DelD,100                  ImplicitDelDtor &IDD) {101  private_templ(CDT);102  // expected-error@#PRIV{{variable of type 'ImplDeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}103  // expected-note@+1{{in instantiation}}104  private_templ(IDC);105  private_templ(DefC);106  private_templ(IC);107  // expected-error@#PRIV{{variable of type 'DeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}108  // expected-note@+1{{in instantiation}}109  private_templ(DelC);110  private_templ(ID);111  private_templ(DefD);112  // expected-error@#PRIV{{variable of type 'DeletedDtor' referenced in OpenACC 'private' clause does not have a destructor; reference has no effect}}113  // expected-note@+1{{in instantiation}}114  private_templ(DelD);115  // expected-error@#PRIV{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'private' clause does not have a destructor; reference has no effect}}116  // expected-note@+1{{in instantiation}}117  private_templ(IDD);118}119 120void private_arrays() {121  char *ptr;122  ImplicitCtorDtor CDTArr[5];123  ImplDeletedCtor IDCArr[5]{1,2,3,4,5};124  DefaultedCtor DefCArr[5];125  ImpledCtor ICArr[5];126  DeletedCtor DelCArr[5]{1,2,3,4,5};127  ImpledDtor IDArr[5];128  DefaultedDtor DefDArr[5];129  using DelDArrTy = DeletedDtor[5];130  DelDArrTy &DelDArr = *((DelDArrTy*)ptr);131  using IDDArrTy = ImplicitDelDtor[5];132  IDDArrTy &IDDArr = *((IDDArrTy*)ptr);133 134 135#pragma acc parallel private(CDTArr)136  ;137  // expected-error@+1{{variable of type 'ImplDeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}138#pragma acc parallel private(IDCArr)139  ;140#pragma acc parallel private(DefCArr)141  ;142#pragma acc parallel private(ICArr)143  ;144  // expected-error@+1{{variable of type 'DeletedCtor' referenced in OpenACC 'private' clause does not have a default constructor; reference has no effect}}145#pragma acc parallel private(DelCArr)146  ;147#pragma acc parallel private(IDArr)148  ;149#pragma acc parallel private(DefDArr)150  ;151  // expected-error@+1{{variable of type 'DeletedDtor' referenced in OpenACC 'private' clause does not have a destructor; reference has no effect}}152#pragma acc parallel private(DelDArr)153  ;154  // expected-error@+1{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'private' clause does not have a destructor; reference has no effect}}155#pragma acc parallel private(IDDArr)156  ;157}158 159void firstprivate_uses(ImplicitCtorDtor &CDT, ImplDeletedCtor &IDC,160                  DefaultedCtor &DefC, ImpledCtor &IC, DeletedCtor &DelC,161                  ImpledDtor &ID, DefaultedDtor &DefD, DeletedDtor &DelD,162                  ImplicitDelDtor &IDD, DeletedCopy &DelCopy,163                  DefaultedCopy &DefCopy, UserCopy &UDCopy) {164#pragma acc parallel firstprivate(CDT)165  ;166 167#pragma acc parallel firstprivate(IDC)168  ;169 170#pragma acc parallel firstprivate(DefC)171  ;172 173#pragma acc parallel firstprivate(IC)174  ;175 176#pragma acc parallel firstprivate(DelC)177  ;178 179#pragma acc parallel firstprivate(ID)180  ;181 182#pragma acc parallel firstprivate(DefD)183  ;184 185  // expected-error@+1{{variable of type 'DeletedDtor' referenced in OpenACC 'firstprivate' clause does not have a destructor; reference has no effect}}186#pragma acc parallel firstprivate(DelD)187  ;188 189  // expected-error@+1{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}190#pragma acc parallel firstprivate(IDD)191  ;192 193  // expected-error@+1{{variable of type 'DeletedCopy' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}194#pragma acc parallel firstprivate(DelCopy)195  ;196#pragma acc parallel firstprivate(DefCopy)197  ;198#pragma acc parallel firstprivate(UDCopy)199  ;200}201 202template<typename T>203void firstprivate_template(T& t) {204#pragma acc parallel firstprivate(t) // #FIRSTPRIV205  ;206}207 208void firstprivate_inst(ImplicitCtorDtor &CDT, ImplDeletedCtor &IDC,209                       DefaultedCtor &DefC, ImpledCtor &IC, DeletedCtor &DelC,210                       ImpledDtor &ID, DefaultedDtor &DefD, DeletedDtor &DelD,211                       ImplicitDelDtor &IDD, DeletedCopy &DelCopy,212                       DefaultedCopy &DefCopy, UserCopy &UDCopy) {213  firstprivate_template(CDT);214  firstprivate_template(IDC);215  firstprivate_template(DefC);216  firstprivate_template(IC);217  firstprivate_template(DelC);218  firstprivate_template(ID);219  firstprivate_template(DefD);220  // expected-error@#FIRSTPRIV{{variable of type 'DeletedDtor' referenced in OpenACC 'firstprivate' clause does not have a destructor; reference has no effect}}221  // expected-note@+1{{in instantiation}}222  firstprivate_template(DelD);223  // expected-error@#FIRSTPRIV{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}224  // expected-note@+1{{in instantiation}}225  firstprivate_template(IDD);226  // expected-error@#FIRSTPRIV{{variable of type 'DeletedCopy' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}227  // expected-note@+1{{in instantiation}}228  firstprivate_template(DelCopy);229  firstprivate_template(DefCopy);230  firstprivate_template(UDCopy);231}232 233void firstprivate_arrays() {234  char *ptr;235  ImplicitCtorDtor CDTArr[5];236  ImplDeletedCtor IDCArr[5]{1,2,3,4,5};237  DefaultedCtor DefCArr[5];238  ImpledCtor ICArr[5];239  DeletedCtor DelCArr[5]{1,2,3,4,5};240  ImpledDtor IDArr[5];241  DefaultedDtor DefDArr[5];242  using DelDArrTy = DeletedDtor[5];243  DelDArrTy &DelDArr = *((DelDArrTy*)ptr);244  using IDDArrTy = ImplicitDelDtor[5];245  IDDArrTy &IDDArr = *((IDDArrTy*)ptr);246  DeletedCopy DelCopyArr[5]{};247  DefaultedCopy DefCopyArr[5]{};248  UserCopy UDCopyArr[5]{};249 250#pragma acc parallel firstprivate(CDTArr)251  ;252#pragma acc parallel firstprivate(IDCArr)253  ;254#pragma acc parallel firstprivate(DefCArr)255  ;256#pragma acc parallel firstprivate(ICArr)257  ;258#pragma acc parallel firstprivate(DelCArr)259  ;260#pragma acc parallel firstprivate(IDArr)261  ;262#pragma acc parallel firstprivate(DefDArr)263  ;264  // expected-error@+1{{variable of type 'DeletedDtor' referenced in OpenACC 'firstprivate' clause does not have a destructor; reference has no effect}}265#pragma acc parallel firstprivate(DelDArr)266  ;267  // expected-error@+1{{variable of type 'ImplicitDelDtor' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}268#pragma acc parallel firstprivate(IDDArr)269  ;270  // expected-error@+1{{variable of type 'DeletedCopy' referenced in OpenACC 'firstprivate' clause does not have a copy constructor; reference has no effect}}271#pragma acc parallel firstprivate(DelCopyArr)272  ;273#pragma acc parallel firstprivate(DefCopyArr)274  ;275#pragma acc parallel firstprivate(UDCopyArr)276  ;277}278 279template<unsigned I>280void non_const_array_templ() {281  int CArr[I];282 283#pragma acc parallel firstprivate(CArr)284  ;285}286 287void non_const_arrays(int I) {288  non_const_array_templ<5>();289 290  int NCArr[I];291  // expected-warning@+1{{variable of array type 'int[I]' referenced in OpenACC 'firstprivate' clause does not have constant bounds; initialization will happen after decay to pointer}}292#pragma acc parallel firstprivate(NCArr)293  ;294}295