@@ -28,6 +28,13 @@ struct JustAWeirdBird {
2828 }
2929};
3030
31+ int i = 0 ;
32+ struct HasOperatorDelete : public Bird {
33+ ~HasOperatorDelete () { }
34+ void operator delete (void *p) { i-=2 ; }
35+ void operator delete[] (void *p) { i--; }
36+ };
37+
3138// Vector deleting dtor for Bird is an alias because no new Bird[] expressions
3239// in the TU.
3340// X64: @"??_EBird@@UEAAPEAXI@Z" = weak dso_local unnamed_addr alias ptr (ptr, i32), ptr @"??_GBird@@UEAAPEAXI@Z"
@@ -53,6 +60,9 @@ void bar() {
5360
5461 JustAWeirdBird B;
5562 B.doSmth (38 );
63+
64+ Bird *p = new HasOperatorDelete[2 ];
65+ dealloc (p);
5666}
5767
5868// CHECK-LABEL: define dso_local void @{{.*}}dealloc{{.*}}(
@@ -129,8 +139,8 @@ void bar() {
129139// CHECK-NEXT: %[[ISFIRSTBITZERO:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
130140// CHECK-NEXT: br i1 %[[ISFIRSTBITZERO]], label %dtor.continue, label %dtor.call_delete_after_array_destroy
131141// CHECK: dtor.call_delete_after_array_destroy:
132- // X64-NEXT: call void @"??3 @YAXPEAX_K@Z"(ptr noundef %[[COOKIEGEP]], i64 noundef 8)
133- // X86-NEXT: call void @"??3 @YAXPAXI@Z"(ptr noundef %[[COOKIEGEP]], i32 noundef 4)
142+ // X64-NEXT: call void @"??_V @YAXPEAX_K@Z"(ptr noundef %[[COOKIEGEP]], i64 noundef 8)
143+ // X86-NEXT: call void @"??_V @YAXPAXI@Z"(ptr noundef %[[COOKIEGEP]], i32 noundef 4)
134144// CHECK-NEXT: br label %dtor.continue
135145// CHECK: dtor.scalar:
136146// X64-NEXT: call void @"??1Parrot@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(8) %[[LTHIS]])
@@ -150,3 +160,12 @@ void bar() {
150160// X64-SAME: ptr noundef nonnull align 8 dereferenceable(8) %this, i32 noundef %should_call_delete)
151161// X86: define weak dso_local x86_thiscallcc noundef ptr @"??_EJustAWeirdBird@@UAEPAXI@Z"(
152162// X86-SAME: ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %should_call_delete) unnamed_addr
163+
164+ // X64-LABEL: define weak dso_local noundef ptr @"??_EHasOperatorDelete@@UEAAPEAXI@Z"
165+ // X86-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EHasOperatorDelete@@UAEPAXI@Z"
166+ // CHECK: dtor.call_delete_after_array_destroy:
167+ // X64-NEXT: call void @"??_VHasOperatorDelete@@SAXPEAX@Z"
168+ // X86-NEXT: call void @"??_VHasOperatorDelete@@SAXPAX@Z"
169+ // CHECK: dtor.call_delete:
170+ // X64-NEXT: call void @"??3HasOperatorDelete@@SAXPEAX@Z"
171+ // X86-NEXT: call void @"??3HasOperatorDelete@@SAXPAX@Z"
0 commit comments