Skip to content

Commit 70342ea

Browse files
authored
Merge pull request #74934 from swiftlang/egorzhdan/6.0-irgen-default-dtor
🍒[cxx-interop] Always instantiate the default destructor
2 parents 0ef18ab + 62d79f2 commit 70342ea

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

lib/IRGen/GenClangDecl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ void IRGenModule::emitClangDecl(const clang::Decl *decl) {
263263
// Unfortunately, implicitly defined CXXDestructorDecls don't have a real
264264
// body, so we need to traverse these manually.
265265
if (auto *dtor = dyn_cast<clang::CXXDestructorDecl>(next)) {
266+
if (dtor->isImplicit() && dtor->isDefaulted() && !dtor->isDeleted() &&
267+
!dtor->doesThisDeclarationHaveABody())
268+
clangSema.DefineImplicitDestructor(dtor->getLocation(), dtor);
269+
266270
if (dtor->isImplicit() || dtor->hasBody()) {
267271
auto cxxRecord = dtor->getParent();
268272

test/Interop/Cxx/class/Inputs/destructors.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,16 @@ struct HasNonTrivialImplicitDestructor {
2828
HasUserProvidedDestructor member;
2929
};
3030

31+
template <typename T>
32+
struct TemplatedHasVirtualDestructor {
33+
T value;
34+
virtual ~TemplatedHasVirtualDestructor() {}
35+
};
36+
37+
template <typename T>
38+
struct DerivedTemplatedHasVirtualDestructor : TemplatedHasVirtualDestructor<T> {
39+
};
40+
41+
using DerivedTemplatedHasVirtualDestructorChar = DerivedTemplatedHasVirtualDestructor<char>;
42+
3143
#endif // TEST_INTEROP_CXX_CLASS_INPUTS_DESTRUCTORS_H
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: %target-swiftxx-frontend -emit-ir -I %S/Inputs -validate-tbd-against-ir=none %s | %FileCheck %s
2+
3+
import Destructors
4+
5+
let _ = DerivedTemplatedHasVirtualDestructorChar()
6+
7+
// CHECK: define {{.*}} @{{_ZN36DerivedTemplatedHasVirtualDestructorIcED2Ev|"\?\?1\?\$DerivedTemplatedHasVirtualDestructor@D@@UEAA@XZ"}}
8+
// CHECK: entry:
9+
// CHECK: call {{.*}} @{{_ZN29TemplatedHasVirtualDestructorIcED2Ev|"\?\?1\?\$TemplatedHasVirtualDestructor@D@@UEAA@XZ"}}

0 commit comments

Comments
 (0)