brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 41d4314 Raw
408 lines · cpp
1// RUN: %clang_cc1 -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++20 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s --implicit-check-not "call void @__sanitizer_dtor_callback_fields"2// RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++20 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s --implicit-check-not "call void @__sanitizer_dtor_callback_fields"3 4struct Empty {};5 6struct EmptyNonTrivial {7  ~EmptyNonTrivial();8};9 10struct Trivial {11  int a;12  char c;13};14static_assert(sizeof(Trivial) == 8);15 16struct NonTrivial {17  int a;18  char c;19  ~NonTrivial();20};21static_assert(sizeof(NonTrivial) == 8);22 23namespace T0 {24struct Struct {25  Trivial f1;26  int f2;27  char f3;28  ~Struct(){};29} var;30static_assert(sizeof(Struct) == 16);31} // namespace T032// CHECK-LABEL: define {{.*}} @_ZN2T06StructD2Ev(33// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)34// CHECK-NEXT:    ret void35 36namespace empty {37namespace T1 {38struct Struct {39  NonTrivial nt;40  Trivial f1;41  int f2;42  char f3;43} var;44static_assert(sizeof(Struct) == 24);45} // namespace T146// CHECK-LABEL: define {{.*}} @_ZN5empty2T16StructD2Ev(47// CHECK:         [[GEP:%.+]] = getelementptr i8, {{.*}}, i64 8{{$}}48// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr [[GEP]], i64 13)49// CHECK:         call void @_ZN10NonTrivialD1Ev(50// CHECK-NEXT:    ret void51 52namespace T2 {53struct Struct {54  Trivial f1;55  NonTrivial nt;56  int f2;57  char f3;58} var;59static_assert(sizeof(Struct) == 24);60} // namespace T261// CHECK-LABEL: define {{.*}} @_ZN5empty2T26StructD2Ev(62// CHECK:         [[GEP1:%.+]] = getelementptr i8, {{.*}}, i64 16{{$}}63// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr [[GEP1]], i64 5)64// CHECK:         call void @_ZN10NonTrivialD1Ev(65// CHECK:         [[GEP2:%.+]] = getelementptr i8, {{.*}}, i64 0{{$}}66// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr [[GEP2]], i64 8)67// CHECK-NEXT:    ret void68 69namespace T3 {70struct Struct {71  Trivial f1;72  int f2;73  NonTrivial nt;74  char f3;75} var;76static_assert(sizeof(Struct) == 24);77} // namespace T378// CHECK-LABEL: define {{.*}} @_ZN5empty2T36StructD2Ev(79// CHECK:         [[GEP1:%.+]] = getelementptr i8, {{.*}}, i64 20{{$}}80// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr [[GEP1]], i64 1)81// CHECK:         call void @_ZN10NonTrivialD1Ev(82// CHECK:         [[GEP2:%.+]] = getelementptr i8, {{.*}}, i64 0{{$}}83// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr [[GEP2]], i64 12)84// CHECK-NEXT:    ret void85 86namespace T4 {87struct Struct {88  Trivial f1;89  int f2;90  char f3;91  NonTrivial nt;92} var;93static_assert(sizeof(Struct) == 24);94} // namespace T495// CHECK-LABEL: define {{.*}} @_ZN5empty2T46StructD2Ev(96// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)97// CHECK-NEXT:    ret void98 99namespace T5 {100struct Struct {101  [[no_unique_address]] Empty e;102  NonTrivial nt;103  Trivial f1;104  int f2;105  char f3;106} var;107static_assert(sizeof(Struct) == 24);108} // namespace T5109// CHECK-LABEL: define {{.*}} @_ZN5empty2T56StructD2Ev(110// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)111// CHECK:         call void @_ZN10NonTrivialD1Ev(112// CHECK-NEXT:    ret void113 114namespace T6 {115struct Struct {116  NonTrivial nt;117  [[no_unique_address]] Empty e;118  Trivial f1;119  int f2;120  char f3;121} var;122static_assert(sizeof(Struct) == 24);123} // namespace T6124// CHECK-LABEL: define {{.*}} @_ZN5empty2T66StructD2Ev(125// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)126// CHECK:         call void @_ZN10NonTrivialD1Ev(127// CHECK-NEXT:    ret void128 129namespace T7 {130struct Struct {131  Trivial f1;132  NonTrivial nt;133  [[no_unique_address]] Empty e;134  int f2;135  char f3;136} var;137static_assert(sizeof(Struct) == 24);138} // namespace T7139// CHECK-LABEL: define {{.*}} @_ZN5empty2T76StructD2Ev(140// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 5)141// CHECK:         call void @_ZN10NonTrivialD1Ev(142// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 8)143// CHECK-NEXT:    ret void144 145namespace T8 {146struct Struct {147  Trivial f1;148  [[no_unique_address]] Empty e;149  NonTrivial nt;150  int f2;151  char f3;152} var;153static_assert(sizeof(Struct) == 24);154} // namespace T8155// CHECK-LABEL: define {{.*}} @_ZN5empty2T86StructD2Ev(156// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 5)157// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 8)158// CHECK-NEXT:    ret void159 160namespace T9 {161struct Struct {162  Trivial f1;163  int f2;164  NonTrivial nt;165  [[no_unique_address]] Empty e;166  char f3;167} var;168static_assert(sizeof(Struct) == 24);169} // namespace T9170// CHECK-LABEL: define {{.*}} @_ZN5empty2T96StructD2Ev(171// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 1)172// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 12)173// CHECK-NEXT:    ret void174 175namespace T10 {176struct Struct {177  Trivial f1;178  int f2;179  [[no_unique_address]] Empty e;180  NonTrivial nt;181  char f3;182} var;183static_assert(sizeof(Struct) == 24);184} // namespace T10185// CHECK-LABEL: define {{.*}} @_ZN5empty3T106StructD2Ev(186// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 1)187// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 12)188// CHECK-NEXT:    ret void189 190namespace T11 {191struct Struct {192  Trivial f1;193  int f2;194  char f3;195  NonTrivial nt;196  [[no_unique_address]] Empty e;197} var;198static_assert(sizeof(Struct) == 24);199} // namespace T11200// CHECK-LABEL: define {{.*}} @_ZN5empty3T116StructD2Ev(201// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)202// CHECK-NEXT:    ret void203 204namespace T12 {205struct Struct {206  Trivial f1;207  int f2;208  char f3;209  [[no_unique_address]] Empty e;210  NonTrivial nt;211} var;212static_assert(sizeof(Struct) == 24);213} // namespace T12214} // namespace empty215// CHECK-LABEL: define {{.*}} @_ZN5empty3T126StructD2Ev(216// CHECK:         call void @_ZN10NonTrivialD1Ev(217// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)218// CHECK-NEXT:    ret void219 220namespace empty_non_trivial {221namespace T1 {222struct Struct {223  NonTrivial nt;224  Trivial f1;225  int f2;226  char f3;227} var;228static_assert(sizeof(Struct) == 24);229} // namespace T1230// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T16StructD2Ev(231// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)232// CHECK:         call void @_ZN10NonTrivialD1Ev(233// CHECK-NEXT:    ret void234 235namespace T2 {236struct Struct {237  Trivial f1;238  NonTrivial nt;239  int f2;240  char f3;241} var;242static_assert(sizeof(Struct) == 24);243} // namespace T2244// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T26StructD2Ev(245// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 5)246// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 8)247// CHECK-NEXT:    ret void248 249namespace T3 {250struct Struct {251  Trivial f1;252  int f2;253  NonTrivial nt;254  char f3;255} var;256static_assert(sizeof(Struct) == 24);257} // namespace T3258// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T36StructD2Ev(259// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 1)260// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 12)261// CHECK-NEXT:    ret void262 263namespace T4 {264struct Struct {265  Trivial f1;266  int f2;267  char f3;268  NonTrivial nt;269} var;270static_assert(sizeof(Struct) == 24);271} // namespace T4272// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T46StructD2Ev(273// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)274// CHECK-NEXT:    ret void275 276namespace T5 {277struct Struct {278  [[no_unique_address]] EmptyNonTrivial e;279  NonTrivial nt;280  Trivial f1;281  int f2;282  char f3;283} var;284static_assert(sizeof(Struct) == 24);285} // namespace T5286// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T56StructD2Ev(287// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)288// CHECK:         call void @_ZN10NonTrivialD1Ev(289// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(290// CHECK-NEXT:    ret void291 292namespace T6 {293struct Struct {294  NonTrivial nt;295  [[no_unique_address]] EmptyNonTrivial e;296  Trivial f1;297  int f2;298  char f3;299} var;300static_assert(sizeof(Struct) == 24);301} // namespace T6302// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T66StructD2Ev(303// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 13)304// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(305// CHECK:         call void @_ZN10NonTrivialD1Ev(306// CHECK-NEXT:    ret void307 308namespace T7 {309struct Struct {310  Trivial f1;311  NonTrivial nt;312  [[no_unique_address]] EmptyNonTrivial e;313  int f2;314  char f3;315} var;316static_assert(sizeof(Struct) == 24);317} // namespace T7318// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T76StructD2Ev(319// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 5)320// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(321// CHECK:         call void @_ZN10NonTrivialD1Ev(322// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 8)323// CHECK-NEXT:    ret void324 325namespace T8 {326struct Struct {327  Trivial f1;328  [[no_unique_address]] EmptyNonTrivial e;329  NonTrivial nt;330  int f2;331  char f3;332} var;333static_assert(sizeof(Struct) == 24);334} // namespace T8335// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T86StructD2Ev(336// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 5)337// CHECK:         call void @_ZN10NonTrivialD1Ev(338// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 8)339// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(340// CHECK-NEXT:    ret void341 342namespace T9 {343struct Struct {344  Trivial f1;345  int f2;346  NonTrivial nt;347  [[no_unique_address]] EmptyNonTrivial e;348  char f3;349} var;350static_assert(sizeof(Struct) == 24);351} // namespace T9352// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T96StructD2Ev(353// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 1)354// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(355// CHECK:         call void @_ZN10NonTrivialD1Ev(356// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 12)357// CHECK-NEXT:    ret void358 359namespace T10 {360struct Struct {361  Trivial f1;362  int f2;363  [[no_unique_address]] EmptyNonTrivial e;364  NonTrivial nt;365  char f3;366} var;367static_assert(sizeof(Struct) == 24);368} // namespace T10369// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial3T106StructD2Ev(370// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 1)371// CHECK:         call void @_ZN10NonTrivialD1Ev(372// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 12)373// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(374// CHECK-NEXT:    ret void375 376namespace T11 {377struct Struct {378  Trivial f1;379  int f2;380  char f3;381  NonTrivial nt;382  [[no_unique_address]] EmptyNonTrivial e;383} var;384static_assert(sizeof(Struct) == 24);385} // namespace T11386// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial3T116StructD2Ev(387// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(388// CHECK:         call void @_ZN10NonTrivialD1Ev(389// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)390// CHECK-NEXT:    ret void391 392namespace T12 {393struct Struct {394  Trivial f1;395  int f2;396  char f3;397  [[no_unique_address]] EmptyNonTrivial e;398  NonTrivial nt;399} var;400static_assert(sizeof(Struct) == 24);401} // namespace T12402} // namespace empty_non_trivial403// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial3T126StructD2Ev(404// CHECK:         call void @_ZN10NonTrivialD1Ev(405// CHECK:         call void @__sanitizer_dtor_callback_fields(ptr {{.*}}, i64 16)406// CHECK:         call void @_ZN15EmptyNonTrivialD1Ev(407// CHECK:         ret void408