@@ -28,6 +28,13 @@ struct JustAWeirdBird {
28
28
}
29
29
};
30
30
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
+
31
38
// Vector deleting dtor for Bird is an alias because no new Bird[] expressions
32
39
// in the TU.
33
40
// X64: @"??_EBird@@UEAAPEAXI@Z" = weak dso_local unnamed_addr alias ptr (ptr, i32), ptr @"??_GBird@@UEAAPEAXI@Z"
@@ -53,6 +60,9 @@ void bar() {
53
60
54
61
JustAWeirdBird B;
55
62
B.doSmth(38);
63
+
64
+ Bird *p = new HasOperatorDelete[2];
65
+ dealloc(p);
56
66
}
57
67
58
68
// CHECK-LABEL: define dso_local void @{{.*}}dealloc{{.*}}(
@@ -129,8 +139,8 @@ void bar() {
129
139
// CHECK-NEXT: %[[ISFIRSTBITZERO:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
130
140
// CHECK-NEXT: br i1 %[[ISFIRSTBITZERO]], label %dtor.continue, label %dtor.call_delete_after_array_destroy
131
141
// 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)
134
144
// CHECK-NEXT: br label %dtor.continue
135
145
// CHECK: dtor.scalar:
136
146
// X64-NEXT: call void @"??1Parrot@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(8) %[[LTHIS]])
@@ -150,3 +160,12 @@ void bar() {
150
160
// X64-SAME: ptr noundef nonnull align 8 dereferenceable(8) %this, i32 noundef %should_call_delete)
151
161
// X86: define weak dso_local x86_thiscallcc noundef ptr @"??_EJustAWeirdBird@@UAEPAXI@Z"(
152
162
// 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