Skip to content

Commit 6e927db

Browse files
committed
Add a test for scalar destructor removal
1 parent 252cd7f commit 6e927db

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,28 @@ struct Parrot : public Bird {
1212

1313
Bird::~Bird() {}
1414

15+
// For the weird bird we first emit scalar deleting destructor, then find out
16+
// that we need vector deleting destructor and remove the alias.
17+
struct JustAWeirdBird {
18+
virtual ~JustAWeirdBird() {}
19+
20+
bool doSmth(int n) {
21+
JustAWeirdBird *c = new JustAWeirdBird[n];
22+
23+
delete[] c;
24+
return true;
25+
}
26+
};
27+
1528
// Vector deleting dtor for Bird is an alias because no new Bird[] expressions
1629
// in the TU.
1730
// CHECK: @"??_EBird@@UEAAPEAXI@Z" = weak dso_local unnamed_addr alias ptr (ptr, i32), ptr @"??_GBird@@UEAAPEAXI@Z"
1831
// No scalar destructor for Parrot.
1932
// CHECK-NOT: @"??_GParrot"
2033
// No vector destructor definition for Bird.
2134
// CHECK-NOT: define{{.*}}@"??_EBird"
35+
// No scalar deleting dtor for JustAWeirdBird.
36+
// CHECK-NOT: @"??_GJustAWeirdBird"
2237

2338
void dealloc(Bird *p) {
2439
delete[] p;
@@ -31,6 +46,9 @@ Bird* alloc() {
3146

3247
void bar() {
3348
dealloc(alloc());
49+
50+
JustAWeirdBird B;
51+
B.doSmth(38);
3452
}
3553

3654
// CHECK-LABEL: define dso_local void @{{.*}}dealloc{{.*}}(
@@ -101,8 +119,11 @@ void bar() {
101119
// CHECK-NEXT: %[[ISFIRSTBITZERO:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
102120
// CHECK-NEXT: br i1 %[[ISFIRSTBITZERO]], label %dtor.continue, label %dtor.call_delete
103121
// CHECK: dtor.call_delete:
104-
// CHECK-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %[[LTHIS]], i64 noundef 8) #3
122+
// CHECK-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %[[LTHIS]], i64 noundef 8)
105123
// CHECK-NEXT: br label %dtor.continue
106124
// CHECK: dtor.continue:
107125
// CHECK-NEXT: %[[LOADRET:.*]] = load ptr, ptr %[[RET]], align 8
108126
// CHECK-NEXT: ret ptr %[[LOADRET]]
127+
128+
// CHECK: define weak dso_local ptr @"??_EJustAWeirdBird@@UEAAPEAXI@Z"(
129+
// CHECK-SAME: ptr %this, i32 %should_call_delete)

0 commit comments

Comments
 (0)