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) {
263
263
// Unfortunately, implicitly defined CXXDestructorDecls don't have a real
264
264
// body, so we need to traverse these manually.
265
265
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
+
266
270
if (dtor->isImplicit () || dtor->hasBody ()) {
267
271
auto cxxRecord = dtor->getParent ();
268
272
Original file line number Diff line number Diff line change @@ -28,4 +28,16 @@ struct HasNonTrivialImplicitDestructor {
28
28
HasUserProvidedDestructor member;
29
29
};
30
30
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
+
31
43
#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