Skip to content

Commit d048e05

Browse files
authored
Merge pull request swiftlang#34649 from zoecarver/cxx/no-import-no-destructor
[cxx-interop] Don't import C++ objects that we can't destroy.
2 parents b527bb5 + bcf8733 commit d048e05

File tree

4 files changed

+21
-21
lines changed

4 files changed

+21
-21
lines changed

lib/ClangImporter/ImportDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3499,7 +3499,7 @@ namespace {
34993499

35003500
if (auto dtor = cxxRecordDecl->getDestructor()) {
35013501
if (dtor->isDeleted() || dtor->getAccess() != clang::AS_public) {
3502-
result->setIsCxxNonTrivial(true);
3502+
return nullptr;
35033503
}
35043504
}
35053505
}

test/Interop/Cxx/class/Inputs/type-classification.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,17 @@ struct StructWithSubobjectPrivateDefaultedDestructor {
112112
StructWithPrivateDefaultedDestructor subobject;
113113
};
114114

115+
struct StructWithDeletedDestructor {
116+
~StructWithDeletedDestructor() = delete;
117+
};
118+
119+
struct StructWithInheritedDeletedDestructor
120+
: StructWithDeletedDestructor {};
121+
122+
struct StructWithSubobjectDeletedDestructor {
123+
StructWithDeletedDestructor subobject;
124+
};
125+
115126
// Tests for common sets of special member functions.
116127

117128
struct StructTriviallyCopyableMovable {

test/Interop/Cxx/class/type-classification-loadable-silgen.swift

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -142,21 +142,6 @@ func pass(s: StructWithSubobjectDefaultedDestructor) {
142142
// CHECK: bb0(%0 : $StructWithSubobjectDefaultedDestructor):
143143
}
144144

145-
// CHECK-LABEL: sil hidden [ossa] @$s4main4pass{{.*[ (]}}StructWithPrivateDefaultedDestructor)
146-
func pass(s: StructWithPrivateDefaultedDestructor) {
147-
// CHECK: bb0(%0 : $*StructWithPrivateDefaultedDestructor):
148-
}
149-
150-
// CHECK-LABEL: sil hidden [ossa] @$s4main4pass{{.*[ (]}}StructWithInheritedPrivateDefaultedDestructor)
151-
func pass(s: StructWithInheritedPrivateDefaultedDestructor) {
152-
// CHECK: bb0(%0 : $*StructWithInheritedPrivateDefaultedDestructor):
153-
}
154-
155-
// CHECK-LABEL: sil hidden [ossa] @$s4main4pass{{.*[ (]}}StructWithSubobjectPrivateDefaultedDestructor)
156-
func pass(s: StructWithSubobjectPrivateDefaultedDestructor) {
157-
// CHECK: bb0(%0 : $*StructWithSubobjectPrivateDefaultedDestructor):
158-
}
159-
160145
// Tests for common sets of special member functions.
161146

162147
// CHECK-LABEL: sil hidden [ossa] @$s4main4pass{{.*[ (]}}StructTriviallyCopyableMovable)
@@ -173,8 +158,3 @@ func pass(s: StructNonCopyableTriviallyMovable) {
173158
func pass(s: StructNonCopyableNonMovable) {
174159
// CHECK: bb0(%0 : $*StructNonCopyableNonMovable):
175160
}
176-
177-
// CHECK-LABEL: sil hidden [ossa] @$s4main4pass{{.*[ (]}}StructDeletedDestructor)
178-
func pass(s: StructDeletedDestructor) {
179-
// CHECK: bb0(%0 : $*StructDeletedDestructor):
180-
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: %target-swift-ide-test -print-module -module-to-print=TypeClassification -I %S/Inputs -source-filename=x -enable-cxx-interop | %FileCheck %s
2+
3+
// Make sure we don't import objects that we can't destroy.
4+
// CHECK-NOT: StructWithPrivateDefaultedDestructor
5+
// CHECK-NOT: StructWithInheritedPrivateDefaultedDestructor
6+
// CHECK-NOT: StructWithSubobjectPrivateDefaultedDestructor
7+
// CHECK-NOT: StructWithDeletedDestructor
8+
// CHECK-NOT: StructWithInheritedDeletedDestructor
9+
// CHECK-NOT: StructWithSubobjectDeletedDestructor

0 commit comments

Comments
 (0)