File tree Expand file tree Collapse file tree 3 files changed +25
-0
lines changed Expand file tree Collapse file tree 3 files changed +25
-0
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 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"}}
You can’t perform that action at this time.
0 commit comments