summaryrefslogtreecommitdiff
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGenCXX/dllexport.cpp5
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-extern-template.cpp2
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-structors.cpp2
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-thunks.cpp3
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vftables.cpp20
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp17
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-vdtors.cpp18
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp2
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp20
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp30
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp18
-rw-r--r--clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp2
-rw-r--r--clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp336
-rw-r--r--clang/test/CodeGenCXX/vtable-consteval.cpp4
-rw-r--r--clang/test/DebugInfo/CXX/windows-dtor.cpp2
-rw-r--r--clang/test/Modules/Inputs/msvc-vector-deleting-dtors/module.modulemap1
-rw-r--r--clang/test/Modules/Inputs/msvc-vector-deleting-dtors/msvc-vector-deleting-dtors.h16
-rw-r--r--clang/test/Modules/msvc-vector-deleting-destructors.cpp30
-rw-r--r--clang/test/Modules/vtable-windows.cppm2
-rw-r--r--clang/test/PCH/Inputs/msvc-vector-deleting-dtors.h16
-rw-r--r--clang/test/PCH/msvc-vector-deleting-destructors.cpp34
-rw-r--r--clang/test/Profile/cxx-abc-deleting-dtor.cpp9
-rw-r--r--clang/test/SemaCXX/gh134265.cpp62
23 files changed, 78 insertions, 573 deletions
diff --git a/clang/test/CodeGenCXX/dllexport.cpp b/clang/test/CodeGenCXX/dllexport.cpp
index ef9d8131c511..dfbb2762ac85 100644
--- a/clang/test/CodeGenCXX/dllexport.cpp
+++ b/clang/test/CodeGenCXX/dllexport.cpp
@@ -633,9 +633,8 @@ struct __declspec(dllexport) Y {
};
struct __declspec(dllexport) Z { virtual ~Z() {} };
-// The deleting dtor does not get exported, but we emit body of vector deleting
-// destructor:
-// M32-DAG: define weak dso_local x86_thiscallcc ptr @"??_EZ@@UAEPAXI@Z"
+// The scalar deleting dtor does not get exported:
+// M32-DAG: define linkonce_odr dso_local x86_thiscallcc ptr @"??_GZ@@UAEPAXI@Z"
// The user-defined dtor does get exported:
diff --git a/clang/test/CodeGenCXX/microsoft-abi-extern-template.cpp b/clang/test/CodeGenCXX/microsoft-abi-extern-template.cpp
index 67df330bc326..ea12aa64ae30 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-extern-template.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-extern-template.cpp
@@ -4,7 +4,7 @@
// own copy the vftable when emitting the available externally constructor.
// CHECK: @"??_7?$Foo@H@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [
-// CHECK-SAME: ptr @"??_E?$Foo@H@@UEAAPEAXI@Z"
+// CHECK-SAME: ptr @"??_G?$Foo@H@@UEAAPEAXI@Z"
// CHECK-SAME: ] }, comdat
// CHECK-LABEL: define dso_local noundef ptr @"?f@@YAPEAU?$Foo@H@@XZ"()
diff --git a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp
index 670988fc1ada..497775840e04 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp
@@ -169,7 +169,7 @@ void foo() {
// DTORS2-LABEL: define linkonce_odr dso_local x86_thiscallcc ptr @"??_EC@dtor_in_second_nvbase@@W3AEPAXI@Z"(ptr %this, i32 %should_call_delete)
// Do an adjustment from B* to C*.
// DTORS2: getelementptr i8, ptr %{{.*}}, i32 -4
-// DTORS2: %[[CALL:.*]] = tail call x86_thiscallcc ptr @"??_EC@dtor_in_second_nvbase@@UAEPAXI@Z"
+// DTORS2: %[[CALL:.*]] = tail call x86_thiscallcc ptr @"??_GC@dtor_in_second_nvbase@@UAEPAXI@Z"
// DTORS2: ret ptr %[[CALL]]
}
diff --git a/clang/test/CodeGenCXX/microsoft-abi-thunks.cpp b/clang/test/CodeGenCXX/microsoft-abi-thunks.cpp
index 83ec158ff7f5..38aa81253cca 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-thunks.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-thunks.cpp
@@ -63,7 +63,8 @@ C::C() {} // Emits vftable and forces thunk generation.
// CODEGEN-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??_EC@@W3AEPAXI@Z"(ptr noundef %this, i32 noundef %should_call_delete) {{.*}} comdat
// CODEGEN: getelementptr i8, ptr {{.*}}, i32 -4
-// CODEGEN: call x86_thiscallcc noundef ptr @"??_EC@@UAEPAXI@Z"
+// FIXME: should actually call _EC, not _GC.
+// CODEGEN: call x86_thiscallcc noundef ptr @"??_GC@@UAEPAXI@Z"
// CODEGEN: ret
// CODEGEN-LABEL: define linkonce_odr dso_local x86_thiscallcc void @"?public_f@C@@W3AEXXZ"(ptr
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp b/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp
index 7ceb15e40e58..bc278bdb847f 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp
@@ -8,38 +8,38 @@ struct S {
virtual ~S();
} s;
-// RTTI-DAG: [[VTABLE_S:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4S@@6B@", ptr @"??_ES@@UAEPAXI@Z"] }, comdat($"??_7S@@6B@")
+// RTTI-DAG: [[VTABLE_S:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4S@@6B@", ptr @"??_GS@@UAEPAXI@Z"] }, comdat($"??_7S@@6B@")
// RTTI-DAG: @"??_7S@@6B@" = unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr [[VTABLE_S]], i32 0, i32 0, i32 1)
-// NO-RTTI-DAG: @"??_7S@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_ES@@UAEPAXI@Z"] }
+// NO-RTTI-DAG: @"??_7S@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_GS@@UAEPAXI@Z"] }
struct __declspec(dllimport) U {
virtual ~U();
} u;
-// RTTI-DAG: [[VTABLE_U:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4U@@6B@", ptr @"??_EU@@UAEPAXI@Z"] }
+// RTTI-DAG: [[VTABLE_U:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4U@@6B@", ptr @"??_GU@@UAEPAXI@Z"] }
// RTTI-DAG: @"??_SU@@6B@" = unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr [[VTABLE_U]], i32 0, i32 0, i32 1)
-// NO-RTTI-DAG: @"??_SU@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_EU@@UAEPAXI@Z"] }
+// NO-RTTI-DAG: @"??_SU@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_GU@@UAEPAXI@Z"] }
struct __declspec(dllexport) V {
virtual ~V();
} v;
-// RTTI-DAG: [[VTABLE_V:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4V@@6B@", ptr @"??_EV@@UAEPAXI@Z"] }, comdat($"??_7V@@6B@")
+// RTTI-DAG: [[VTABLE_V:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4V@@6B@", ptr @"??_GV@@UAEPAXI@Z"] }, comdat($"??_7V@@6B@")
// RTTI-DAG: @"??_7V@@6B@" = dllexport unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr [[VTABLE_V]], i32 0, i32 0, i32 1)
-// NO-RTTI-DAG: @"??_7V@@6B@" = weak_odr dllexport unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_EV@@UAEPAXI@Z"] }
+// NO-RTTI-DAG: @"??_7V@@6B@" = weak_odr dllexport unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_GV@@UAEPAXI@Z"] }
namespace {
struct W {
virtual ~W() {}
} w;
}
-// RTTI-DAG: [[VTABLE_W:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4W@?A0x{{[^@]*}}@@6B@", ptr @"??_EW@?A0x{{[^@]*}}@@UAEPAXI@Z"] }
+// RTTI-DAG: [[VTABLE_W:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4W@?A0x{{[^@]*}}@@6B@", ptr @"??_GW@?A0x{{[^@]*}}@@UAEPAXI@Z"] }
// RTTI-DAG: @"??_7W@?A0x{{[^@]*}}@@6B@" = internal unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr [[VTABLE_W]], i32 0, i32 0, i32 1)
-// NO-RTTI-DAG: @"??_7W@?A0x{{[^@]*}}@@6B@" = internal unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_EW@?A0x{{[^@]*}}@@UAEPAXI@Z"] }
+// NO-RTTI-DAG: @"??_7W@?A0x{{[^@]*}}@@6B@" = internal unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_GW@?A0x{{[^@]*}}@@UAEPAXI@Z"] }
struct X {};
template <class> struct Y : virtual X {
@@ -49,7 +49,7 @@ template <class> struct Y : virtual X {
extern template class Y<int>;
template Y<int>::Y();
-// RTTI-DAG: [[VTABLE_Y:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4?$Y@H@@6B@", ptr @"??_E?$Y@H@@UAEPAXI@Z"] }, comdat($"??_7?$Y@H@@6B@")
+// RTTI-DAG: [[VTABLE_Y:@.*]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4?$Y@H@@6B@", ptr @"??_G?$Y@H@@UAEPAXI@Z"] }, comdat($"??_7?$Y@H@@6B@")
// RTTI-DAG: @"??_7?$Y@H@@6B@" = unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr [[VTABLE_Y]], i32 0, i32 0, i32 1)
-// NO-RTTI-DAG: @"??_7?$Y@H@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_E?$Y@H@@UAEPAXI@Z"] }, comdat
+// NO-RTTI-DAG: @"??_7?$Y@H@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_G?$Y@H@@UAEPAXI@Z"] }, comdat
diff --git a/clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp
index 7e9dce18b279..b54775f6c5dd 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp
@@ -80,15 +80,6 @@ B::~B() {
// CHECK2: call x86_thiscallcc void @"??1VBase@@UAE@XZ"(ptr {{[^,]*}} %[[VBASE_i8]])
// CHECK2: ret
- // CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??0B@test2@@QAE@XZ"
- // CHECK2: (ptr {{[^,]*}} returned align 4 dereferenceable(4) %this, i32 noundef %is_most_derived)
- // CHECK2: call x86_thiscallcc noundef ptr @"??0A@test2@@QAE@XZ"(ptr {{[^,]*}} %{{.*}})
- // CHECK2: ret
-
- // CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??_GD@pr36921@@UAEPAXI@Z"(
- // CHECK2: %[[THIS_RELOAD:.*]] = load ptr, ptr
- // CHECK2: %[[THIS_ADJ_i8:.*]] = getelementptr inbounds i8, ptr %[[THIS_RELOAD]], i32 -4
-
// CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??_GB@@UAEPAXI@Z"
// CHECK2: store ptr %{{.*}}, ptr %[[THIS_ADDR:.*]], align 4
// CHECK2: %[[THIS_i8:.*]] = getelementptr inbounds i8, ptr %[[THIS_PARAM_i8:.*]], i32 -8
@@ -302,6 +293,11 @@ void callC() { C x; }
// CHECK: call x86_thiscallcc noundef ptr @"??0A@test2@@QAE@XZ"(ptr {{[^,]*}} %{{.*}})
// CHECK: ret
+// CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??0B@test2@@QAE@XZ"
+// CHECK2: (ptr {{[^,]*}} returned align 4 dereferenceable(4) %this, i32 noundef %is_most_derived)
+// CHECK2: call x86_thiscallcc noundef ptr @"??0A@test2@@QAE@XZ"(ptr {{[^,]*}} %{{.*}})
+// CHECK2: ret
+
}
namespace test3 {
@@ -484,6 +480,9 @@ struct B {
struct C : virtual B {};
struct D : virtual A, C {};
D d;
+// CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??_GD@pr36921@@UAEPAXI@Z"(
+// CHECK2: %[[THIS_RELOAD:.*]] = load ptr, ptr
+// CHECK2: %[[THIS_ADJ_i8:.*]] = getelementptr inbounds i8, ptr %[[THIS_RELOAD]], i32 -4
}
namespace issue_60465 {
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-vdtors.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-vdtors.cpp
index 74150b0ecb53..a407766f8ed9 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-vdtors.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-vdtors.cpp
@@ -12,18 +12,18 @@ struct B {
struct C : A, B {
// CHECK-LABEL: VFTable for 'A' in 'C' (2 entries).
- // CHECK-NEXT: 0 | C::~C() [vector deleting]
+ // CHECK-NEXT: 0 | C::~C() [scalar deleting]
// CHECK-NEXT: 1 | void A::z1()
// CHECK-LABEL: VFTable for 'B' in 'C' (1 entry).
- // CHECK-NEXT: 0 | C::~C() [vector deleting]
+ // CHECK-NEXT: 0 | C::~C() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-LABEL: Thunks for 'C::~C()' (1 entry).
// CHECK-NEXT: 0 | [this adjustment: -4 non-virtual]
// CHECK-LABEL: VFTable indices for 'C' (1 entry).
- // CHECK-NEXT: 0 | C::~C() [vector deleting]
+ // CHECK-NEXT: 0 | C::~C() [scalar deleting]
virtual ~C();
};
@@ -41,7 +41,7 @@ struct E : D, B {
// CHECK-NEXT: 0 | void D::z4()
// CHECK-LABEL: VFTable for 'B' in 'E' (1 entry).
- // CHECK-NEXT: 0 | E::~E() [vector deleting]
+ // CHECK-NEXT: 0 | E::~E() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-LABEL: Thunks for 'E::~E()' (1 entry).
@@ -49,7 +49,7 @@ struct E : D, B {
// CHECK-LABEL: VFTable indices for 'E' (1 entry).
// CHECK-NEXT: -- accessible via vfptr at offset 4 --
- // CHECK-NEXT: 0 | E::~E() [vector deleting]
+ // CHECK-NEXT: 0 | E::~E() [scalar deleting]
};
void build_vftable(E *obj) { delete obj; }
@@ -61,7 +61,7 @@ struct F : D, B {
// CHECK-NEXT: 0 | void D::z4()
// CHECK-LABEL: VFTable for 'B' in 'F' (1 entry).
- // CHECK-NEXT: 0 | F::~F() [vector deleting]
+ // CHECK-NEXT: 0 | F::~F() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-LABEL: Thunks for 'F::~F()' (1 entry).
@@ -69,7 +69,7 @@ struct F : D, B {
// CHECK-LABEL: VFTable indices for 'F' (1 entry).
// CHECK-NEXT: -- accessible via vfptr at offset 4 --
- // CHECK-NEXT: 0 | F::~F() [vector deleting]
+ // CHECK-NEXT: 0 | F::~F() [scalar deleting]
};
void build_vftable(F *obj) { delete obj; }
@@ -79,7 +79,7 @@ struct G : F {
// CHECK-NEXT: 0 | void D::z4()
// CHECK-LABEL: VFTable for 'B' in 'F' in 'G' (1 entry).
- // CHECK-NEXT: 0 | G::~G() [vector deleting]
+ // CHECK-NEXT: 0 | G::~G() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-LABEL: Thunks for 'G::~G()' (1 entry).
@@ -87,7 +87,7 @@ struct G : F {
// CHECK-LABEL: VFTable indices for 'G' (1 entry).
// CHECK-NEXT: -- accessible via vfptr at offset 4 --
- // CHECK-NEXT: 0 | G::~G() [vector deleting]
+ // CHECK-NEXT: 0 | G::~G() [scalar deleting]
virtual ~G();
};
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
index 1a589370d3a7..5030a5dcd2a5 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
@@ -213,6 +213,6 @@ struct C : virtual B { C *f(); };
C c;
// VFTABLES-LABEL: VFTable indices for 'pr34302::C' (2 entries).
// VFTABLES-NEXT: -- accessible via vbtable index 1, vfptr at offset 0 --
-// VFTABLES-NEXT: 0 | pr34302::C::~C() [vector deleting]
+// VFTABLES-NEXT: 0 | pr34302::C::~C() [scalar deleting]
// VFTABLES-NEXT: 2 | C *pr34302::C::f()
}
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp
index c95202e8cc25..b0bf927d38f7 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp
@@ -44,10 +44,10 @@ void use(B *obj) { obj->f(); }
struct C {
// CHECK-LABEL: VFTable for 'C' (2 entries)
- // CHECK-NEXT: 0 | C::~C() [vector deleting]
+ // CHECK-NEXT: 0 | C::~C() [scalar deleting]
// CHECK-NEXT: 1 | void C::f()
// CHECK-LABEL: VFTable indices for 'C' (2 entries).
- // CHECK-NEXT: 0 | C::~C() [vector deleting]
+ // CHECK-NEXT: 0 | C::~C() [scalar deleting]
// CHECK-NEXT: 1 | void C::f()
virtual ~C();
@@ -60,10 +60,10 @@ void use(C *obj) { obj->f(); }
struct D {
// CHECK-LABEL: VFTable for 'D' (2 entries)
// CHECK-NEXT: 0 | void D::f()
- // CHECK-NEXT: 1 | D::~D() [vector deleting]
+ // CHECK-NEXT: 1 | D::~D() [scalar deleting]
// CHECK-LABEL: VFTable indices for 'D' (2 entries)
// CHECK-NEXT: 0 | void D::f()
- // CHECK-NEXT: 1 | D::~D() [vector deleting]
+ // CHECK-NEXT: 1 | D::~D() [scalar deleting]
virtual void f();
virtual ~D();
@@ -77,10 +77,10 @@ struct E : A {
// CHECK-NEXT: 0 | void A::f()
// CHECK-NEXT: 1 | void A::g()
// CHECK-NEXT: 2 | void A::h()
- // CHECK-NEXT: 3 | E::~E() [vector deleting]
+ // CHECK-NEXT: 3 | E::~E() [scalar deleting]
// CHECK-NEXT: 4 | void E::i()
// CHECK-LABEL: VFTable indices for 'E' (2 entries).
- // CHECK-NEXT: 3 | E::~E() [vector deleting]
+ // CHECK-NEXT: 3 | E::~E() [scalar deleting]
// CHECK-NEXT: 4 | void E::i()
// ~E would be the key method, but it isn't used, and MS ABI has no key
@@ -98,10 +98,10 @@ struct F : A {
// CHECK-NEXT: 1 | void A::g()
// CHECK-NEXT: 2 | void A::h()
// CHECK-NEXT: 3 | void F::i()
- // CHECK-NEXT: 4 | F::~F() [vector deleting]
+ // CHECK-NEXT: 4 | F::~F() [scalar deleting]
// CHECK-LABEL: VFTable indices for 'F' (2 entries).
// CHECK-NEXT: 3 | void F::i()
- // CHECK-NEXT: 4 | F::~F() [vector deleting]
+ // CHECK-NEXT: 4 | F::~F() [scalar deleting]
virtual void i();
virtual ~F();
@@ -115,12 +115,12 @@ struct G : E {
// CHECK-NEXT: 0 | void G::f()
// CHECK-NEXT: 1 | void A::g()
// CHECK-NEXT: 2 | void A::h()
- // CHECK-NEXT: 3 | G::~G() [vector deleting]
+ // CHECK-NEXT: 3 | G::~G() [scalar deleting]
// CHECK-NEXT: 4 | void E::i()
// CHECK-NEXT: 5 | void G::j()
// CHECK-LABEL: VFTable indices for 'G' (3 entries).
// CHECK-NEXT: 0 | void G::f()
- // CHECK-NEXT: 3 | G::~G() [vector deleting]
+ // CHECK-NEXT: 3 | G::~G() [scalar deleting]
// CHECK-NEXT: 5 | void G::j()
virtual void f(); // overrides A::f()
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp
index be9f281560dc..c5ce69f5cbca 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp
@@ -57,7 +57,7 @@ struct A : virtual V1 {
// CHECK-LABEL: VFTable for 'V1' in 'simple::A' (2 entries).
// CHECK-NEXT: 0 | void simple::A::f()
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
- // CHECK-NEXT: 1 | simple::A::~A() [vector deleting]
+ // CHECK-NEXT: 1 | simple::A::~A() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'simple::A::~A()' (1 entry).
@@ -79,7 +79,7 @@ void use(A *obj) { obj->f(); }
struct B : virtual V3 {
// CHECK-LABEL: VFTable for 'Z' in 'V3' in 'simple::B' (2 entries).
// CHECK-NEXT: 0 | void Z::g()
- // CHECK-NEXT: 1 | simple::B::~B() [vector deleting]
+ // CHECK-NEXT: 1 | simple::B::~B() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'simple::B::~B()' (1 entry).
@@ -88,7 +88,7 @@ struct B : virtual V3 {
// CHECK-LABEL: VFTable for 'V2' in 'V3' in 'simple::B' (2 entries).
// CHECK-NEXT: 0 | void simple::B::f()
// CHECK-NEXT: [this adjustment: vtordisp at -12, 0 non-virtual]
- // CHECK-NEXT: 1 | simple::B::~B() [vector deleting]
+ // CHECK-NEXT: 1 | simple::B::~B() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -12, -8 non-virtual]
// CHECK-LABEL: Thunks for 'simple::B::~B()' (1 entry).
@@ -115,7 +115,7 @@ void use(B *obj) { obj->f(); }
struct C : virtual V4 {
// CHECK-LABEL: VFTable for 'Z' in 'V4' in 'simple::C' (2 entries).
// CHECK-NEXT: 0 | void Z::g()
- // CHECK-NEXT: 1 | simple::C::~C() [vector deleting]
+ // CHECK-NEXT: 1 | simple::C::~C() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'simple::C::~C()' (1 entry).
@@ -124,7 +124,7 @@ struct C : virtual V4 {
// CHECK-LABEL: VFTable for 'V1' in 'V4' in 'simple::C' (2 entries).
// CHECK-NEXT: 0 | void simple::C::f()
// CHECK-NEXT: [this adjustment: vtordisp at -12, 0 non-virtual]
- // CHECK-NEXT: 1 | simple::C::~C() [vector deleting]
+ // CHECK-NEXT: 1 | simple::C::~C() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -12, -8 non-virtual]
// CHECK-LABEL: Thunks for 'simple::C::~C()' (1 entry).
@@ -136,7 +136,7 @@ struct C : virtual V4 {
// CHECK-LABEL: VFTable for 'V2' in 'V4' in 'simple::C' (2 entries).
// CHECK-NEXT: 0 | void simple::C::f()
// CHECK-NEXT: [this adjustment: vtordisp at -16, -4 non-virtual]
- // CHECK-NEXT: 1 | simple::C::~C() [vector deleting]
+ // CHECK-NEXT: 1 | simple::C::~C() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -16, -12 non-virtual]
// CHECK-LABEL: Thunks for 'simple::C::~C()' (1 entry).
@@ -162,7 +162,7 @@ class D : B {
// CHECK-LABEL: VFTable for 'V2' in 'V3' in 'simple::B' in 'simple::D' (2 entries).
// CHECK-NEXT: 0 | void simple::B::f()
// CHECK-NEXT: [this adjustment: vtordisp at -12, -4 non-virtual]
- // CHECK-NEXT: 1 | simple::D::~D() [vector deleting]
+ // CHECK-NEXT: 1 | simple::D::~D() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -12, -8 non-virtual]
D();
int z;
@@ -180,12 +180,12 @@ struct F : virtual E {
// CHECK-LABEL: VFTable for 'Z' in 'V3' in 'simple::E' in 'simple::F' (2 entries).
// CHECK-NEXT: 0 | void simple::F::g()
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
- // CHECK-NEXT: 1 | simple::F::~F() [vector deleting]
+ // CHECK-NEXT: 1 | simple::F::~F() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: VFTable for 'V2' in 'V3' in 'simple::E' in 'simple::F' (2 entries).
// CHECK-NEXT: 0 | void simple::E::f()
- // CHECK-NEXT: 1 | simple::F::~F() [vector deleting]
+ // CHECK-NEXT: 1 | simple::F::~F() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -12, -8 non-virtual]
F();
@@ -202,12 +202,12 @@ struct G : F {
// CHECK-LABEL: VFTable for 'Z' in 'V3' in 'simple::E' in 'simple::F' in 'simple::G' (2 entries).
// CHECK-NEXT: 0 | void simple::F::g()
// CHECK-NEXT: [this adjustment: vtordisp at -4, -4 non-virtual]
- // CHECK-NEXT: 1 | simple::G::~G() [vector deleting]
+ // CHECK-NEXT: 1 | simple::G::~G() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: VFTable for 'V2' in 'V3' in 'simple::E' in 'simple::F' in 'simple::G' (2 entries).
// CHECK-NEXT: 0 | void simple::E::f()
- // CHECK-NEXT: 1 | simple::G::~G() [vector deleting]
+ // CHECK-NEXT: 1 | simple::G::~G() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -12, -8 non-virtual]
G();
@@ -240,7 +240,7 @@ struct A : virtual simple::A {
// CHECK-NEXT: 0 | void simple::A::f()
// CHECK-NEXT: [this adjustment: vtordisp at -4, vbptr at 8 to the left,
// CHECK-NEXT: vboffset at 8 in the vbtable, 8 non-virtual]
- // CHECK-NEXT: 1 | extended::A::~A() [vector deleting]
+ // CHECK-NEXT: 1 | extended::A::~A() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'void simple::A::f()' (1 entry).
@@ -265,7 +265,7 @@ struct B : virtual simple::A {
// CHECK-LABEL: VFTable for 'V1' in 'simple::A' in 'extended::B' (2 entries).
// ...
- // CHECK: 1 | extended::B::~B() [vector deleting]
+ // CHECK: 1 | extended::B::~B() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'void simple::A::f()' (1 entry).
@@ -353,7 +353,7 @@ struct G : virtual simple::A {
// CHECK-NEXT: 0 | void simple::A::f()
// CHECK-NEXT: [this adjustment: vtordisp at -4, vbptr at 8 to the left,
// CHECK-NEXT: vboffset at 8 in the vbtable, 8 non-virtual]
- // CHECK-NEXT: 1 | extended::G::~G() [vector deleting]
+ // CHECK-NEXT: 1 | extended::G::~G() [scalar deleting]
// CHECK-NEXT: [this adjustment: vtordisp at -4, 0 non-virtual]
// CHECK-LABEL: Thunks for 'void simple::A::f()' (1 entry).
@@ -374,7 +374,7 @@ void use(G *obj) { obj->g(); }
struct H : Z, A {
// CHECK-LABEL: VFTable for 'Z' in 'extended::H' (2 entries).
// CHECK-NEXT: 0 | void Z::g()
- // CHECK-NEXT: 1 | extended::H::~H() [vector deleting]
+ // CHECK-NEXT: 1 | extended::H::~H() [scalar deleting]
// CHECK-LABEL: VFTable for 'V1' in 'simple::A' in 'extended::A' in 'extended::H' (2 entries).
// CHECK-NEXT: 0 | void simple::A::f()
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
index e5e6ea5f42c1..257ba270291c 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
@@ -492,7 +492,7 @@ struct X {
struct Y : virtual X {
// CHECK-LABEL: VFTable for 'vdtors::X' in 'vdtors::Y' (2 entries).
- // CHECK-NEXT: 0 | vdtors::Y::~Y() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::Y::~Y() [scalar deleting]
// CHECK-NEXT: 1 | void vdtors::X::zzz()
// CHECK-NOT: Thunks for 'vdtors::Y::~Y()'
@@ -515,7 +515,7 @@ struct U : virtual W {
// CHECK-NEXT: 0 | void vdtors::Z::z()
// CHECK-LABEL: VFTable for 'vdtors::X' in 'vdtors::W' in 'vdtors::U' (2 entries).
- // CHECK-NEXT: 0 | vdtors::U::~U() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::U::~U() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-NEXT: 1 | void vdtors::X::zzz()
@@ -524,7 +524,7 @@ struct U : virtual W {
// CHECK-LABEL: VFTable indices for 'vdtors::U' (1 entry).
// CHECK-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 --
- // CHECK-NEXT: 0 | vdtors::U::~U() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::U::~U() [scalar deleting]
virtual ~U();
};
@@ -536,7 +536,7 @@ struct V : virtual W {
// CHECK-NEXT: 0 | void vdtors::Z::z()
// CHECK-LABEL: VFTable for 'vdtors::X' in 'vdtors::W' in 'vdtors::V' (2 entries).
- // CHECK-NEXT: 0 | vdtors::V::~V() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::V::~V() [scalar deleting]
// CHECK-NEXT: [this adjustment: -4 non-virtual]
// CHECK-NEXT: 1 | void vdtors::X::zzz()
@@ -545,7 +545,7 @@ struct V : virtual W {
// CHECK-LABEL: VFTable indices for 'vdtors::V' (1 entry).
// CHECK-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 --
- // CHECK-NEXT: 0 | vdtors::V::~V() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::V::~V() [scalar deleting]
};
V v;
@@ -557,7 +557,7 @@ struct T : virtual X {
struct P : T, Y {
// CHECK-LABEL: VFTable for 'vdtors::X' in 'vdtors::T' in 'vdtors::P' (2 entries).
- // CHECK-NEXT: 0 | vdtors::P::~P() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::P::~P() [scalar deleting]
// CHECK-NEXT: 1 | void vdtors::X::zzz()
// CHECK-NOT: Thunks for 'vdtors::P::~P()'
@@ -574,18 +574,18 @@ struct Q {
// PR19172: Yet another diamond we miscompiled.
struct R : virtual Q, X {
// CHECK-LABEL: VFTable for 'vdtors::Q' in 'vdtors::R' (1 entry).
- // CHECK-NEXT: 0 | vdtors::R::~R() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::R::~R() [scalar deleting]
// CHECK-NEXT: [this adjustment: -8 non-virtual]
// CHECK-LABEL: Thunks for 'vdtors::R::~R()' (1 entry).
// CHECK-NEXT: 0 | [this adjustment: -8 non-virtual]
// CHECK-LABEL: VFTable for 'vdtors::X' in 'vdtors::R' (2 entries).
- // CHECK-NEXT: 0 | vdtors::R::~R() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::R::~R() [scalar deleting]
// CHECK-NEXT: 1 | void vdtors::X::zzz()
// CHECK-LABEL: VFTable indices for 'vdtors::R' (1 entry).
- // CHECK-NEXT: 0 | vdtors::R::~R() [vector deleting]
+ // CHECK-NEXT: 0 | vdtors::R::~R() [scalar deleting]
virtual ~R();
};
diff --git a/clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp b/clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp
index c8e374e51a03..069f0226ab94 100644
--- a/clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp
+++ b/clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp
@@ -2,7 +2,7 @@
// vftable shouldn't have RTTI data in it.
// CHECK-NOT: @"??_R4S@@6B@"
-// CHECK: @"??_7S@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_ES@@UAEPAXI@Z"] }, comdat
+// CHECK: @"??_7S@@6B@" = linkonce_odr unnamed_addr constant { [1 x ptr] } { [1 x ptr] [ptr @"??_GS@@UAEPAXI@Z"] }, comdat
struct type_info;
namespace std { using ::type_info; }
diff --git a/clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp b/clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp
deleted file mode 100644
index e8012abb79ae..000000000000
--- a/clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-// RUN: %clang_cc1 -emit-llvm -fms-extensions %s -triple=x86_64-pc-windows-msvc -o - | FileCheck --check-prefixes=X64,CHECK %s
-// RUN: %clang_cc1 -emit-llvm -fms-extensions %s -triple=i386-pc-windows-msvc -o - | FileCheck --check-prefixes=X86,CHECK %s
-// RUN: %clang_cc1 -emit-llvm -fms-extensions %s -triple=x86_64-pc-windows-msvc -fclang-abi-compat=21 -o - | FileCheck --check-prefixes=CLANG21 %s
-
-struct Bird {
- virtual ~Bird();
-};
-
-struct Parrot : public Bird {
-// X64: @[[ParrotVtable:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Parrot@@6B@", ptr @"??_EParrot@@UEAAPEAXI@Z"] }, comdat($"??_7Parrot@@6B@")
-// X86: @[[ParrotVtable:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Parrot@@6B@", ptr @"??_EParrot@@UAEPAXI@Z"] }, comdat($"??_7Parrot@@6B@")
-// CLANG21: @[[ParrotVtable:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Parrot@@6B@", ptr @"??_GParrot@@UEAAPEAXI@Z"] }, comdat($"??_7Parrot@@6B@")
-// X64: @[[Bird:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Bird@@6B@", ptr @"??_EBird@@UEAAPEAXI@Z"] }, comdat($"??_7Bird@@6B@")
-// X86: @[[Bird:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Bird@@6B@", ptr @"??_EBird@@UAEPAXI@Z"] }, comdat($"??_7Bird@@6B@")
-// CLANG21: @[[Bird:[0-9]+]] = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4Bird@@6B@", ptr @"??_GBird@@UEAAPEAXI@Z"] }, comdat($"??_7Bird@@6B@")
- virtual ~Parrot() {}
-};
-
-Bird::~Bird() {}
-
-// For the weird bird we first emit scalar deleting destructor, then find out
-// that we need vector deleting destructor and remove the alias.
-struct JustAWeirdBird {
- virtual ~JustAWeirdBird() {}
-
- bool doSmth(int n) {
- JustAWeirdBird *c = new JustAWeirdBird[n];
-
- delete[] c;
- return true;
- }
-};
-
-int i = 0;
-struct HasOperatorDelete : public Bird{
-~HasOperatorDelete() { }
-void operator delete(void *p) { i-=2; }
-void operator delete[](void *p) { i--; }
-};
-
-struct AllocatedAsArray : public Bird {
-
-};
-
-// Vector deleting dtor for Bird is an alias because no new Bird[] expressions
-// in the TU.
-// X64: @"??_EBird@@UEAAPEAXI@Z" = weak dso_local unnamed_addr alias ptr (ptr, i32), ptr @"??_GBird@@UEAAPEAXI@Z"
-// X86: @"??_EBird@@UAEPAXI@Z" = weak dso_local unnamed_addr alias ptr (ptr, i32), ptr @"??_GBird@@UAEPAXI@Z"
-// No scalar destructor for Parrot.
-// CHECK-NOT: @"??_GParrot"
-// No vector destructor definition for Bird.
-// CHECK-NOT: define{{.*}}@"??_EBird"
-// No scalar deleting dtor for JustAWeirdBird.
-// CHECK-NOT: @"??_GJustAWeirdBird"
-// CLANG21-NOT: @"??_E
-
-void dealloc(Bird *p) {
- delete[] p;
-}
-
-Bird* alloc() {
- Parrot* P = new Parrot[38];
- return P;
-}
-
-
-template<class C>
-struct S {
- void foo() { void *p = new C(); delete (C *)p; }
-};
-
-S<AllocatedAsArray[1][3]> sp;
-
-void bar() {
- dealloc(alloc());
-
- JustAWeirdBird B;
- B.doSmth(38);
-
- Bird *p = new HasOperatorDelete[2];
- dealloc(p);
-
- sp.foo();
-}
-
-// CHECK-LABEL: define dso_local void @{{.*}}dealloc{{.*}}(
-// CHECK-SAME: ptr noundef %[[PTR:.*]])
-// CHECK: entry:
-// CHECK-NEXT: %[[PTRADDR:.*]] = alloca ptr
-// CHECK-NEXT: store ptr %[[PTR]], ptr %[[PTRADDR]]
-// CHECK-NEXT: %[[LPTR:.*]] = load ptr, ptr %[[PTRADDR]]
-// CHECK-NEXT: %[[ISNULL:.*]] = icmp eq ptr %[[LPTR]], null
-// CHECK-NEXT: br i1 %[[ISNULL]], label %delete.end, label %delete.notnull
-// CHECK: delete.notnull:
-// X64-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[LPTR]], i64 -8
-// X86-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[LPTR]], i32 -4
-// X64-NEXT: %[[HOWMANY:.*]] = load i64, ptr %[[COOKIEGEP]]
-// X86-NEXT: %[[HOWMANY:.*]] = load i32, ptr %[[COOKIEGEP]]
-// X64-NEXT: %[[ISNOELEM:.*]] = icmp eq i64 %2, 0
-// X86-NEXT: %[[ISNOELEM:.*]] = icmp eq i32 %2, 0
-// CHECK-NEXT: br i1 %[[ISNOELEM]], label %vdtor.nocall, label %vdtor.call
-// CHECK: vdtor.nocall:
-// X64-NEXT: %[[HOWMANYBYTES:.*]] = mul i64 8, %[[HOWMANY]]
-// X86-NEXT: %[[HOWMANYBYTES:.*]] = mul i32 4, %[[HOWMANY]]
-// X64-NEXT: %[[ADDCOOKIESIZE:.*]] = add i64 %[[HOWMANYBYTES]], 8
-// X86-NEXT: %[[ADDCOOKIESIZE:.*]] = add i32 %[[HOWMANYBYTES]], 4
-// X64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %[[COOKIEGEP]], i64 noundef %[[ADDCOOKIESIZE]])
-// X86-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %[[COOKIEGEP]], i32 noundef %[[ADDCOOKIESIZE]])
-// CHECK-NEXT: br label %delete.end
-// CHECK: vdtor.call:
-// CHECK-NEXT: %[[VTABLE:.*]] = load ptr, ptr %[[LPTR]]
-// CHECK-NEXT: %[[FPGEP:.*]] = getelementptr inbounds ptr, ptr %[[VTABLE]], i64 0
-// CHECK-NEXT: %[[FPLOAD:.*]] = load ptr, ptr %[[FPGEP]]
-// X64-NEXT: %[[CALL:.*]] = call noundef ptr %[[FPLOAD]](ptr noundef nonnull align 8 dereferenceable(8) %[[LPTR]], i32 noundef 3)
-// X86-NEXT: %[[CALL:.*]] = call x86_thiscallcc noundef ptr %[[FPLOAD]](ptr noundef nonnull align 4 dereferenceable(4) %[[LPTR]], i32 noundef 3)
-// CHECK-NEXT: br label %delete.end
-// CHECK: delete.end:
-// CHECK-NEXT: ret void
-
-// Normal loop over the array elements for clang21 ABI
-// CLANG21-LABEL: define dso_local void @"?dealloc@@YAXPEAUBird@@@Z"
-// CLANG21: %p.addr = alloca ptr
-// CLANG21-NEXT: store ptr %p, ptr %p.addr
-// CLANG21-NEXT: %0 = load ptr, ptr %p.addr
-// CLANG21-NEXT: %isnull = icmp eq ptr %0, null
-// CLANG21-NEXT: br i1 %isnull, label %delete.end2, label %delete.notnull
-// CLANG21: delete.notnull:
-// CLANG21-NEXT: %1 = getelementptr inbounds i8, ptr %0, i64 -8
-// CLANG21-NEXT: %2 = load i64, ptr %1
-// CLANG21-NEXT: %delete.end = getelementptr inbounds %struct.Bird, ptr %0, i64 %2
-// CLANG21-NEXT: %arraydestroy.isempty = icmp eq ptr %0, %delete.end
-// CLANG21-NEXT: br i1 %arraydestroy.isempty, label %arraydestroy.done1, label %arraydestroy.body
-// CLANG21: arraydestroy.body:
-// CLANG21-NEXT: %arraydestroy.elementPast = phi ptr [ %delete.end, %delete.notnull ], [ %arraydestroy.element, %arraydestroy.body ]
-// CLANG21-NEXT: %arraydestroy.element = getelementptr inbounds %struct.Bird, ptr %arraydestroy.elementPast, i64 -1
-// CLANG21-NEXT: call void @"??1Bird@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(8) %arraydestroy.element)
-// CLANG21-NEXT: %arraydestroy.done = icmp eq ptr %arraydestroy.element, %0
-// CLANG21-NEXT: br i1 %arraydestroy.done, label %arraydestroy.done1, label %arraydestroy.body
-// CLANG21: arraydestroy.done1:
-// CLANG21-NEXT: %3 = mul i64 8, %2
-// CLANG21-NEXT: %4 = add i64 %3, 8
-// CLANG21-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %1, i64 noundef %4)
-// CLANG21-NEXT: br label %delete.end2
-
-// Definition of S::foo, check that it has vector deleting destructor call
-// X64-LABEL: define linkonce_odr dso_local void @"?foo@?$S@$$BY102UAllocatedAsArray@@@@QEAAXXZ"
-// X86-LABEL: define linkonce_odr dso_local x86_thiscallcc void @"?foo@?$S@$$BY102UAllocatedAsArray@@@@QAEXXZ"
-// X64: %[[NEWCALL:.*]] = call noalias noundef nonnull ptr @"??_U@YAPEAX_K@Z"(i64 noundef 32)
-// X86: %[[NEWCALL:.*]] = call noalias noundef nonnull ptr @"??_U@YAPAXI@Z"(i32 noundef 16)
-// X64: %[[ARR:.*]] = getelementptr inbounds i8, ptr %[[NEWCALL]], i64 8
-// X86: %[[ARR:.*]] = getelementptr inbounds i8, ptr %[[NEWCALL]], i32 4
-// CHECK: store ptr %[[ARR]], ptr %[[DP:.*]]
-// CHECK: %[[DEL_PTR:.*]] = load ptr, ptr %[[DP:.*]]
-// CHECK: delete.notnull:
-// X64-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[DEL_PTR]], i64 -8
-// X86-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[DEL_PTR]], i32 -4
-// X64-NEXT: %[[HOWMANY:.*]] = load i64, ptr %[[COOKIEGEP]]
-// X86-NEXT: %[[HOWMANY:.*]] = load i32, ptr %[[COOKIEGEP]]
-// X64-NEXT: %[[ISNOELEM:.*]] = icmp eq i64 %[[HOWMANY]], 0
-// X86-NEXT: %[[ISNOELEM:.*]] = icmp eq i32 %[[HOWMANY]], 0
-// CHECK-NEXT: br i1 %[[ISNOELEM]], label %vdtor.nocall, label %vdtor.call
-// CHECK: vdtor.nocall: ; preds = %delete.notnull
-// X64-NEXT: %[[HOWMANYBYTES:.*]] = mul i64 8, %[[HOWMANY]]
-// X86-NEXT: %[[HOWMANYBYTES:.*]] = mul i32 4, %[[HOWMANY]]
-// X64-NEXT: %[[ADDCOOKIESIZE:.*]] = add i64 %[[HOWMANYBYTES]], 8
-// X86-NEXT: %[[ADDCOOKIESIZE:.*]] = add i32 %[[HOWMANYBYTES]], 4
-// X64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %[[COOKIEGEP]], i64 noundef %[[ADDCOOKIESIZE]])
-// X86-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %[[COOKIEGEP]], i32 noundef %[[ADDCOOKIESIZE]])
-// CHECK-NEXT: br label %delete.end
-// CHECK: vdtor.call: ; preds = %delete.notnull
-// CHECK-NEXT: %[[VTABLE:.*]] = load ptr, ptr %[[DEL_PTR]]
-// CHECK-NEXT: %[[FPGEP:.*]] = getelementptr inbounds ptr, ptr %[[VTABLE]], i64 0
-// CHECK-NEXT: %[[FPLOAD:.*]] = load ptr, ptr %[[FPGEP]]
-// X64-NEXT: %[[CALL:.*]] = call noundef ptr %[[FPLOAD]](ptr noundef nonnull align 8 dereferenceable(8) %[[DEL_PTR]], i32 noundef 3)
-// X86-NEXT: %[[CALL:.*]] = call x86_thiscallcc noundef ptr %[[FPLOAD]](ptr noundef nonnull align 4 dereferenceable(4) %[[DEL_PTR]], i32 noundef 3)
-// CHECK-NEXT: br label %delete.end
-// CHECK: delete.end:
-// CHECK-NEXT: ret void
-
-// Vector dtor definition for Parrot.
-// X64-LABEL: define weak dso_local noundef ptr @"??_EParrot@@UEAAPEAXI@Z"(
-// X64-SAME: ptr {{.*}} %[[THIS:.*]], i32 {{.*}} %[[IMPLICIT_PARAM:.*]]) unnamed_addr
-// X86-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EParrot@@UAEPAXI@Z"(
-// X86-SAME: ptr noundef nonnull align 4 dereferenceable(4) %[[THIS:.*]], i32 noundef %[[IMPLICIT_PARAM:.*]]) unnamed_addr
-// CHECK: entry:
-// CHECK-NEXT: %[[RET:.*]] = alloca ptr
-// CHECK-NEXT: %[[IPADDR:.*]] = alloca i32
-// CHECK-NEXT: %[[THISADDR:.*]] = alloca ptr
-// CHECK-NEXT: store i32 %[[IMPLICIT_PARAM]], ptr %[[IPADDR]]
-// CHECK-NEXT: store ptr %[[THIS]], ptr %[[THISADDR]]
-// CHECK-NEXT: %[[LTHIS:.*]] = load ptr, ptr %[[THISADDR]]
-// CHECK-NEXT: store ptr %[[LTHIS]], ptr %[[RET]]
-// CHECK-NEXT: %[[LIP:.*]] = load i32, ptr %[[IPADDR]]
-// CHECK-NEXT: %[[SECONDBIT:.*]] = and i32 %[[LIP]], 2
-// CHECK-NEXT: %[[ISSECONDBITZERO:.*]] = icmp eq i32 %[[SECONDBIT]], 0
-// CHECK-NEXT: br i1 %[[ISSECONDBITZERO:.*]], label %dtor.scalar, label %dtor.vector
-// CHECK: dtor.vector:
-// X64-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[LTHIS]], i64 -8
-// X86-NEXT: %[[COOKIEGEP:.*]] = getelementptr inbounds i8, ptr %[[LTHIS]], i32 -4
-// X64-NEXT: %[[HOWMANY:.*]] = load i64, ptr %[[COOKIEGEP]]
-// X86-NEXT: %[[HOWMANY:.*]] = load i32, ptr %[[COOKIEGEP]]
-// X64-NEXT: %[[END:.*]] = getelementptr inbounds %struct.Parrot, ptr %[[LTHIS]], i64 %[[HOWMANY]]
-// X86-NEXT: %[[END:.*]] = getelementptr inbounds %struct.Parrot, ptr %[[LTHIS]], i32 %[[HOWMANY]]
-// CHECK-NEXT: br label %arraydestroy.body
-// CHECK: arraydestroy.body:
-// CHECK-NEXT: %[[PASTELEM:.*]] = phi ptr [ %delete.end, %dtor.vector ], [ %arraydestroy.element, %arraydestroy.body ]
-// X64-NEXT: %[[CURELEM:.*]] = getelementptr inbounds %struct.Parrot, ptr %[[PASTELEM]], i64 -1
-// X86-NEXT: %[[CURELEM:.*]] = getelementptr inbounds %struct.Parrot, ptr %[[PASTELEM]], i32 -1
-// X64-NEXT: call void @"??1Parrot@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(8) %[[CURELEM]])
-// X86-NEXT: call x86_thiscallcc void @"??1Parrot@@UAE@XZ"(ptr noundef nonnull align 4 dereferenceable(4) %[[CURELEM]])
-// CHECK-NEXT: %[[DONE:.*]] = icmp eq ptr %[[CURELEM]], %[[LTHIS]]
-// CHECK-NEXT: br i1 %[[DONE]], label %arraydestroy.done3, label %arraydestroy.body
-// CHECK: arraydestroy.done3:
-// CHECK-NEXT: br label %dtor.vector.cont
-// CHECK: dtor.vector.cont:
-// CHECK-NEXT: %[[FIRSTBIT:.*]] = and i32 %[[LIP]], 1
-// CHECK-NEXT: %[[ISFIRSTBITZERO:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
-// CHECK-NEXT: br i1 %[[ISFIRSTBITZERO]], label %dtor.continue, label %dtor.call_delete_after_array_destroy
-// CHECK: dtor.call_delete_after_array_destroy:
-// X64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %[[COOKIEGEP]], i64 noundef 8)
-// X86-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %[[COOKIEGEP]], i32 noundef 4)
-// CHECK-NEXT: br label %dtor.continue
-// CHECK: dtor.scalar:
-// X64-NEXT: call void @"??1Parrot@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(8) %[[LTHIS]])
-// X86-NEXT: call x86_thiscallcc void @"??1Parrot@@UAE@XZ"(ptr noundef nonnull align 4 dereferenceable(4) %[[LTHIS]])
-// CHECK-NEXT: %[[FIRSTBIT:.*]] = and i32 %[[LIP]], 1
-// CHECK-NEXT: %[[ISFIRSTBITZERO:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
-// CHECK-NEXT: br i1 %[[ISFIRSTBITZERO]], label %dtor.continue, label %dtor.call_delete
-// CHECK: dtor.call_delete:
-// X64-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %[[LTHIS]], i64 noundef 8)
-// X86-NEXT: call void @"??3@YAXPAXI@Z"(ptr noundef %[[LTHIS]], i32 noundef 4)
-// CHECK-NEXT: br label %dtor.continue
-// CHECK: dtor.continue:
-// CHECK-NEXT: %[[LOADRET:.*]] = load ptr, ptr %[[RET]]
-// CHECK-NEXT: ret ptr %[[LOADRET]]
-
-// X64: define weak dso_local noundef ptr @"??_EJustAWeirdBird@@UEAAPEAXI@Z"(
-// X64-SAME: ptr noundef nonnull align 8 dereferenceable(8) %this, i32 noundef %should_call_delete)
-// CLANG21: define linkonce_odr dso_local noundef ptr @"??_GJustAWeirdBird@@UEAAPEAXI@Z"(
-// X86: define weak dso_local x86_thiscallcc noundef ptr @"??_EJustAWeirdBird@@UAEPAXI@Z"(
-// X86-SAME: ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %should_call_delete) unnamed_addr
-
-// X64-LABEL: define weak dso_local noundef ptr @"??_EHasOperatorDelete@@UEAAPEAXI@Z"
-// X86-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EHasOperatorDelete@@UAEPAXI@Z"
-// CLANG21: define linkonce_odr dso_local noundef ptr @"??_GHasOperatorDelete@@UEAAPEAXI@Z"
-// CHECK: dtor.call_delete_after_array_destroy:
-// CHECK-NEXT: %[[SHOULD_CALL_GLOB_DELETE:.*]] = and i32 %should_call_delete2, 4
-// CHECK-NEXT: %[[CHK:.*]] = icmp eq i32 %[[SHOULD_CALL_GLOB_DELETE]], 0
-// CHECK-NEXT: br i1 %[[CHK]], label %dtor.call_class_delete_after_array_destroy, label %dtor.call_glob_delete_after_array_destroy
-// CHECK: dtor.call_class_delete_after_array_destroy:
-// X64-NEXT: call void @"??_VHasOperatorDelete@@SAXPEAX@Z"(ptr noundef %2)
-// X86-NEXT: call void @"??_VHasOperatorDelete@@SAXPAX@Z"
-// CHECK-NEXT: br label %dtor.continue
-// CHECK: dtor.call_glob_delete_after_array_destroy:
-// X64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %2, i64 noundef 8)
-// X86-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %2, i32 noundef 4)
-// CHECK-NEXT: br label %dtor.continue
-
-
-
-struct BaseDelete1 {
- void operator delete[](void *);
-};
-struct BaseDelete2 {
- void operator delete[](void *);
-};
-struct BaseDestructor {
- BaseDestructor() {}
- virtual ~BaseDestructor() = default;
-};
-
-struct Derived : BaseDelete1, BaseDelete2, BaseDestructor {
- Derived() {}
-};
-
-void foobartest() {
- Derived *a = new Derived[10]();
- ::delete[] a;
-}
-
-// X64-LABEL: define weak dso_local noundef ptr @"??_EDerived@@UEAAPEAXI@Z"(ptr {{.*}} %this, i32 noundef %should_call_delete)
-// X86-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EDerived@@UAEPAXI@Z"(ptr {{.*}} %this, i32 noundef %should_call_delete)
-// CHECK: %retval = alloca ptr
-// CHECK-NEXT: %should_call_delete.addr = alloca i32, align 4
-// CHECK-NEXT: %this.addr = alloca ptr
-// CHECK-NEXT: store i32 %should_call_delete, ptr %should_call_delete.addr, align 4
-// CHECK-NEXT: store ptr %this, ptr %this.addr
-// CHECK-NEXT: %this1 = load ptr, ptr %this.addr
-// CHECK-NEXT: store ptr %this1, ptr %retval
-// CHECK-NEXT: %should_call_delete2 = load i32, ptr %should_call_delete.addr, align 4
-// CHECK-NEXT: %0 = and i32 %should_call_delete2, 2
-// CHECK-NEXT: %1 = icmp eq i32 %0, 0
-// CHECK-NEXT: br i1 %1, label %dtor.scalar, label %dtor.vector
-// CHECK: dtor.vector:
-// X64-NEXT: %2 = getelementptr inbounds i8, ptr %this1, i64 -8
-// X86-NEXT: %2 = getelementptr inbounds i8, ptr %this1, i32 -4
-// X64-NEXT: %3 = load i64, ptr %2
-// X86-NEXT: %3 = load i32, ptr %2
-// X64-NEXT: %delete.end = getelementptr inbounds %struct.Derived, ptr %this1, i64 %3
-// X86-NEXT: %delete.end = getelementptr inbounds %struct.Derived, ptr %this1, i32 %3
-// CHECK-NEXT: br label %arraydestroy.body
-// CHECK: arraydestroy.body:
-// CHECK-NEXT: %arraydestroy.elementPast = phi ptr [ %delete.end, %dtor.vector ], [ %arraydestroy.element, %arraydestroy.body ]
-// X64-NEXT: %arraydestroy.element = getelementptr inbounds %struct.Derived, ptr %arraydestroy.elementPast, i64 -1
-// X86-NEXT: %arraydestroy.element = getelementptr inbounds %struct.Derived, ptr %arraydestroy.elementPast, i32 -1
-// X64-NEXT: call void @"??1Derived@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(16) %arraydestroy.element)
-// X86-NEXT: call x86_thiscallcc void @"??1Derived@@UAE@XZ"(ptr noundef nonnull align 4 dereferenceable(8) %arraydestroy.element)
-// CHECK-NEXT: %arraydestroy.done = icmp eq ptr %arraydestroy.element, %this1
-// CHECK-NEXT: br i1 %arraydestroy.done, label %arraydestroy.done3, label %arraydestroy.body
-// CHECK: arraydestroy.done3:
-// CHECK-NEXT: br label %dtor.vector.cont
-// CHECK: dtor.vector.cont:
-// CHECK-NEXT: %4 = and i32 %should_call_delete2, 1
-// CHECK-NEXT: %5 = icmp eq i32 %4, 0
-// CHECK-NEXT: br i1 %5, label %dtor.continue, label %dtor.call_delete_after_array_destroy
-// CHECK: dtor.call_delete_after_array_destroy:
-// X64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %2, i64 noundef 16)
-// X86-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %2, i32 noundef 8)
-// CHECK-NEXT: br label %dtor.continue
-// CHECK: dtor.scalar:
-// X64-NEXT: call void @"??1Derived@@UEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(16) %this1)
-// X86-NEXT: call x86_thiscallcc void @"??1Derived@@UAE@XZ"(ptr noundef nonnull align 4 dereferenceable(8) %this1)
-// CHECK-NEXT: %6 = and i32 %should_call_delete2, 1
-// CHECK-NEXT: %7 = icmp eq i32 %6, 0
-// CHECK-NEXT: br i1 %7, label %dtor.continue, label %dtor.call_delete
-// CHECK: dtor.call_delete:
-// X64-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %this1, i64 noundef 16)
-// X86-NEXT: call void @"??3@YAXPAXI@Z"(ptr noundef %this1, i32 noundef 8)
-// CHECK-NEXT: br label %dtor.continue
-// CHECK: dtor.continue:
-// CHECK-NEXT: %8 = load ptr, ptr %retval
-// CHECK-NEXT: ret ptr %8
-
-// X64: define weak dso_local noundef ptr @"??_EAllocatedAsArray@@UEAAPEAXI@Z"
-// X86: define weak dso_local x86_thiscallcc noundef ptr @"??_EAllocatedAsArray@@UAEPAXI@Z"
-// CLANG21: define linkonce_odr dso_local noundef ptr @"??_GAllocatedAsArray@@UEAAPEAXI@Z"
diff --git a/clang/test/CodeGenCXX/vtable-consteval.cpp b/clang/test/CodeGenCXX/vtable-consteval.cpp
index 220143465c57..1454f6fde357 100644
--- a/clang/test/CodeGenCXX/vtable-consteval.cpp
+++ b/clang/test/CodeGenCXX/vtable-consteval.cpp
@@ -26,7 +26,7 @@ struct B {
B b;
// ITANIUM-DAG: @_ZTV1C = {{.*}} constant { [4 x ptr] } {{.*}} null, ptr @_ZTI1C, ptr @_ZN1CD1Ev, ptr @_ZN1CD0Ev
-// MSABI-DAG: @[[C_VFTABLE:.*]] = {{.*}} constant { [2 x ptr] } {{.*}} @"??_R4C@@6B@", ptr @"??_EC@@UEAAPEAXI@Z"
+// MSABI-DAG: @[[C_VFTABLE:.*]] = {{.*}} constant { [2 x ptr] } {{.*}} @"??_R4C@@6B@", ptr @"??_GC@@UEAAPEAXI@Z"
struct C {
virtual ~C() = default;
virtual consteval C &operator=(const C&) = default;
@@ -36,7 +36,7 @@ struct C {
C c;
// ITANIUM-DAG: @_ZTV1D = {{.*}} constant { [4 x ptr] } {{.*}} null, ptr @_ZTI1D, ptr @_ZN1DD1Ev, ptr @_ZN1DD0Ev
-// MSABI-DAG: @[[D_VFTABLE:.*]] = {{.*}} constant { [2 x ptr] } {{.*}} @"??_R4D@@6B@", ptr @"??_ED@@UEAAPEAXI@Z"
+// MSABI-DAG: @[[D_VFTABLE:.*]] = {{.*}} constant { [2 x ptr] } {{.*}} @"??_R4D@@6B@", ptr @"??_GD@@UEAAPEAXI@Z"
struct D : C {};
// ITANIUM-DAG: @d = {{.*}}global { ptr } { {{.*}} @_ZTV1D,
// MSABI-DAG: @"?d@@3UD@@A" = {{.*}}global { ptr } { ptr @"??_7D@@6B@" }
diff --git a/clang/test/DebugInfo/CXX/windows-dtor.cpp b/clang/test/DebugInfo/CXX/windows-dtor.cpp
index ffef45b9f7d1..beea56ce7368 100644
--- a/clang/test/DebugInfo/CXX/windows-dtor.cpp
+++ b/clang/test/DebugInfo/CXX/windows-dtor.cpp
@@ -16,7 +16,7 @@ struct AB: A, B {
template struct AB<int>;
// CHECK: define {{.*}}@"??_E?$AB@H@@W3AEPAXI@Z"({{.*}} !dbg [[THUNK_VEC_DEL_DTOR:![0-9]*]]
-// CHECK: call {{.*}}@"??_E?$AB@H@@UAEPAXI@Z"({{.*}}) #{{[0-9]*}}, !dbg [[THUNK_LOC:![0-9]*]]
+// CHECK: call {{.*}}@"??_G?$AB@H@@UAEPAXI@Z"({{.*}}) #{{[0-9]*}}, !dbg [[THUNK_LOC:![0-9]*]]
// CHECK: define
// CHECK: [[THUNK_VEC_DEL_DTOR]] = distinct !DISubprogram
diff --git a/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/module.modulemap b/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/module.modulemap
deleted file mode 100644
index bb7ff1c9952c..000000000000
--- a/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/module.modulemap
+++ /dev/null
@@ -1 +0,0 @@
-module msvc_vector_deleting_destructors { header "msvc-vector-deleting-dtors.h" export * }
diff --git a/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/msvc-vector-deleting-dtors.h b/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/msvc-vector-deleting-dtors.h
deleted file mode 100644
index 55492667e39d..000000000000
--- a/clang/test/Modules/Inputs/msvc-vector-deleting-dtors/msvc-vector-deleting-dtors.h
+++ /dev/null
@@ -1,16 +0,0 @@
-class Base1 {
-public:
- void operator delete[](void *);
-};
-class Base2 {
-public:
- void operator delete(void *);
-};
-struct Derived : Base1, Base2 {
- virtual ~Derived() {}
-};
-void in_h_tests(Derived *p, Derived *p1) {
- ::delete[] p;
-
- delete[] p1;
-}
diff --git a/clang/test/Modules/msvc-vector-deleting-destructors.cpp b/clang/test/Modules/msvc-vector-deleting-destructors.cpp
deleted file mode 100644
index a0806054355d..000000000000
--- a/clang/test/Modules/msvc-vector-deleting-destructors.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// RUN: rm -rf %t
-// RUN: %clang_cc1 -fmodules -fimplicit-module-maps %s -x c++ -fmodules-cache-path=%t -I %S/Inputs/msvc-vector-deleting-dtors -emit-llvm -triple=i386-pc-win32 -o - | FileCheck %s --check-prefixes CHECK,CHECK32
-// RUN: %clang_cc1 -fmodules -fimplicit-module-maps %s -x c++ -fmodules-cache-path=%t -I %S/Inputs/msvc-vector-deleting-dtors -emit-llvm -triple=x86_64-pc-win32 -o - | FileCheck %s --check-prefixes CHECK,CHECK64
-
-#include "msvc-vector-deleting-dtors.h"
-
-void call_in_module_function(void) {
- in_h_tests(new Derived[2], new Derived[3]);
-}
-
-void out_of_module_tests(Derived *p, Derived *p1) {
- ::delete[] p;
-
- delete[] p1;
-}
-
-// CHECK32-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EDerived@@UAEPAXI@Z"
-// CHECK64-LABEL: define weak dso_local noundef ptr @"??_EDerived@@UEAAPEAXI@Z"
-// CHECK: dtor.call_class_delete_after_array_destroy:
-// CHECK32-NEXT: call void @"??_VBase1@@SAXPAX@Z"(ptr noundef %2)
-// CHECK64-NEXT: call void @"??_VBase1@@SAXPEAX@Z"(ptr noundef %2)
-// CHECK: dtor.call_glob_delete_after_array_destroy:
-// CHECK32-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %2, i32 noundef 8)
-// CHECK64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %2, i64 noundef 16)
-// CHECK: dtor.call_glob_delete:
-// CHECK32-NEXT: call void @"??3@YAXPAXI@Z"(ptr noundef %this1, i32 noundef 8)
-// CHECK64-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %this1, i64 noundef 16)
-// CHECK: dtor.call_class_delete:
-// CHECK32-NEXT: call void @"??3Base2@@SAXPAX@Z"(ptr noundef %this1)
-// CHECK64-NEXT: call void @"??3Base2@@SAXPEAX@Z"(ptr noundef %this1)
diff --git a/clang/test/Modules/vtable-windows.cppm b/clang/test/Modules/vtable-windows.cppm
index e45e32d6b4d6..dbde24c8a9bd 100644
--- a/clang/test/Modules/vtable-windows.cppm
+++ b/clang/test/Modules/vtable-windows.cppm
@@ -23,4 +23,4 @@ void test() {
// Check that the virtual table is an unnamed_addr constant in comdat that can
// be merged with the virtual table with other TUs.
-// CHECK: unnamed_addr constant {{.*}}[ptr @"??_R4Fruit@@6B@", ptr @"??_EFruit@@UAEPAXI@Z", ptr @"?eval@Fruit@@UAEXXZ"{{.*}}comdat($"??_7Fruit@@6B@")
+// CHECK: unnamed_addr constant {{.*}}[ptr @"??_R4Fruit@@6B@", ptr @"??_GFruit@@UAEPAXI@Z", ptr @"?eval@Fruit@@UAEXXZ"{{.*}}comdat($"??_7Fruit@@6B@")
diff --git a/clang/test/PCH/Inputs/msvc-vector-deleting-dtors.h b/clang/test/PCH/Inputs/msvc-vector-deleting-dtors.h
deleted file mode 100644
index 55492667e39d..000000000000
--- a/clang/test/PCH/Inputs/msvc-vector-deleting-dtors.h
+++ /dev/null
@@ -1,16 +0,0 @@
-class Base1 {
-public:
- void operator delete[](void *);
-};
-class Base2 {
-public:
- void operator delete(void *);
-};
-struct Derived : Base1, Base2 {
- virtual ~Derived() {}
-};
-void in_h_tests(Derived *p, Derived *p1) {
- ::delete[] p;
-
- delete[] p1;
-}
diff --git a/clang/test/PCH/msvc-vector-deleting-destructors.cpp b/clang/test/PCH/msvc-vector-deleting-destructors.cpp
deleted file mode 100644
index f548dba8efd2..000000000000
--- a/clang/test/PCH/msvc-vector-deleting-destructors.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Test this without pch.
-// RUN: %clang_cc1 -x c++ -include %S/Inputs/msvc-vector-deleting-dtors.h -emit-llvm -o - %s -triple=i386-pc-win32 | FileCheck %s --check-prefixes CHECK,CHECK32
-// RUN: %clang_cc1 -x c++ -include %S/Inputs/msvc-vector-deleting-dtors.h -emit-llvm -o - %s -triple=x86_64-pc-win32 | FileCheck %s --check-prefixes CHECK,CHECK64
-
-// Test with pch.
-// RUN: %clang_cc1 -x c++ -emit-pch -o %t -triple=i386-pc-win32 %S/Inputs/msvc-vector-deleting-dtors.h
-// RUN: %clang_cc1 -x c++ -include-pch %t -emit-llvm -triple=i386-pc-win32 -o - %s | FileCheck %s --check-prefixes CHECK,CHECK32
-// RUN: %clang_cc1 -x c++ -emit-pch -o %t -triple=x86_64-pc-win32 %S/Inputs/msvc-vector-deleting-dtors.h
-// RUN: %clang_cc1 -x c++ -include-pch %t -emit-llvm -triple=x86_64-pc-win32 -o - %s | FileCheck %s --check-prefixes CHECK,CHECK64
-
-void call_in_module_function(void) {
- in_h_tests(new Derived[2], new Derived[3]);
-}
-
-void out_of_module_tests(Derived *p, Derived *p1) {
- ::delete[] p;
-
- delete[] p1;
-}
-
-// CHECK32-LABEL: define weak dso_local x86_thiscallcc noundef ptr @"??_EDerived@@UAEPAXI@Z"
-// CHECK64-LABEL: define weak dso_local noundef ptr @"??_EDerived@@UEAAPEAXI@Z"
-// CHECK: dtor.call_class_delete_after_array_destroy:
-// CHECK32-NEXT: call void @"??_VBase1@@SAXPAX@Z"(ptr noundef %2)
-// CHECK64-NEXT: call void @"??_VBase1@@SAXPEAX@Z"(ptr noundef %2)
-// CHECK: dtor.call_glob_delete_after_array_destroy:
-// CHECK32-NEXT: call void @"??_V@YAXPAXI@Z"(ptr noundef %2, i32 noundef 8)
-// CHECK64-NEXT: call void @"??_V@YAXPEAX_K@Z"(ptr noundef %2, i64 noundef 16)
-// CHECK: dtor.call_glob_delete:
-// CHECK32-NEXT: call void @"??3@YAXPAXI@Z"(ptr noundef %this1, i32 noundef 8)
-// CHECK64-NEXT: call void @"??3@YAXPEAX_K@Z"(ptr noundef %this1, i64 noundef 16)
-// CHECK: dtor.call_class_delete:
-// CHECK32-NEXT: call void @"??3Base2@@SAXPAX@Z"(ptr noundef %this1)
-// CHECK64-NEXT: call void @"??3Base2@@SAXPEAX@Z"(ptr noundef %this1)
diff --git a/clang/test/Profile/cxx-abc-deleting-dtor.cpp b/clang/test/Profile/cxx-abc-deleting-dtor.cpp
index 7c2a5bbc93af..c65a8e8013c3 100644
--- a/clang/test/Profile/cxx-abc-deleting-dtor.cpp
+++ b/clang/test/Profile/cxx-abc-deleting-dtor.cpp
@@ -24,15 +24,16 @@ DerivedABC *useABCVTable() { return new DerivedABC(); }
// MSVC: @"__profn_??1ABC@@{{.*}}" =
// MSVC-NOT: @"__profn_??_G{{.*}}" =
+// MSVC-LABEL: define linkonce_odr dso_local noundef ptr @"??_GDerivedABC@@UEAAPEAXI@Z"(ptr {{[^,]*}} %this, {{.*}})
+// MSVC-NOT: call void @llvm.instrprof.increment({{.*}})
+// MSVC: call void @"??1DerivedABC@@UEAA@XZ"({{.*}})
+// MSVC: ret void
+
// MSVC-LABEL: define linkonce_odr dso_local noundef ptr @"??_GABC@@UEAAPEAXI@Z"(ptr {{[^,]*}} %this, {{.*}})
// MSVC-NOT: call void @llvm.instrprof.increment({{.*}})
// MSVC: call void @llvm.trap()
// MSVC-NEXT: unreachable
-// MSVC-LABEL: define linkonce_odr dso_local noundef ptr @"??_GDerivedABC@@UEAAPEAXI@Z"(ptr {{[^,]*}} %this, {{.*}})
-// MSVC-NOT: call void @llvm.instrprof.increment({{.*}})
-// MSVC: call void @"??1DerivedABC@@UEAA@XZ"({{.*}})
-
// MSVC-LABEL: define linkonce_odr dso_local void @"??1DerivedABC@@UEAA@XZ"({{.*}})
// MSVC: call void @llvm.instrprof.increment({{.*}})
// MSVC: call void @"??1ABC@@UEAA@XZ"({{.*}})
diff --git a/clang/test/SemaCXX/gh134265.cpp b/clang/test/SemaCXX/gh134265.cpp
deleted file mode 100644
index 790165411c93..000000000000
--- a/clang/test/SemaCXX/gh134265.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// RUN: %clang_cc1 %s -verify=expected -fsyntax-only -triple=x86_64-unknown-linux-gnu
-// RUN: %clang_cc1 %s -verify=expected -fsyntax-only -triple=x86_64-unknown-linux-gnu -std=c++20
-// RUN: %clang_cc1 %s -verify=expected,ms -fms-extensions -fms-compatibility -triple=x86_64-pc-windows-msvc -DMS
-
-// Verify that clang doesn't emit additional errors when searching for
-// additional operators delete for vector deleting destructors support.
-
-struct Foo {
- virtual ~Foo() {} // expected-error {{attempt to use a deleted function}}
- static void operator delete(void* ptr) = delete; // expected-note {{explicitly marked deleted here}}
-};
-
-
-struct Bar {
- virtual ~Bar() {}
- static void operator delete[](void* ptr) = delete;
-};
-
-struct Baz {
- virtual ~Baz() {}
- static void operator delete[](void* ptr) = delete; // expected-note {{explicitly marked deleted here}}
-};
-
-struct BarBaz {
- ~BarBaz() {}
- static void operator delete[](void* ptr) = delete;
-};
-
-void foobar() {
- Baz *B = new Baz[10]();
- delete [] B; // expected-error {{attempt to use a deleted function}}
- BarBaz *BB = new BarBaz[10]();
-}
-
-struct BaseDelete1 {
- void operator delete[](void *);
-};
-struct BaseDelete2 {
- void operator delete[](void *);
-};
-struct BaseDestructor {
- BaseDestructor() {}
- virtual ~BaseDestructor() = default;
-};
-struct Final : BaseDelete1, BaseDelete2, BaseDestructor {
- Final() {}
-};
-struct FinalExplicit : BaseDelete1, BaseDelete2, BaseDestructor {
- FinalExplicit() {}
- inline ~FinalExplicit() {}
-};
-
-#ifdef MS
-struct Final1 : BaseDelete1, BaseDelete2, BaseDestructor {
- __declspec(dllexport) ~Final1() {}
-};
-#endif // MS
-
-void foo() {
- Final* a = new Final[10]();
- FinalExplicit* b = new FinalExplicit[10]();
-}