Skip to content

Commit 6eb00d5

Browse files
authored
Merge pull request #35964 from zoecarver/cxx/another-double-add-fix
[cxx-interop] Skip already-imported sub decls.
2 parents 841e4ee + fc33728 commit 6eb00d5

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

lib/ClangImporter/ImportDecl.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3473,6 +3473,11 @@ namespace {
34733473
}
34743474
}
34753475

3476+
// If we've already imported this decl, skip it so we don't add the same
3477+
// member twice.
3478+
if (Impl.ImportedDecls.count({nd->getCanonicalDecl(), getVersion()}))
3479+
continue;
3480+
34763481
auto member = Impl.importDecl(nd, getActiveSwiftVersion());
34773482
if (!member) {
34783483
if (!isa<clang::TypeDecl>(nd) && !isa<clang::FunctionDecl>(nd)) {
@@ -3485,11 +3490,6 @@ namespace {
34853490
}
34863491

34873492
if (auto nestedType = dyn_cast<TypeDecl>(member)) {
3488-
// Only import definitions. Otherwise, we might add the same member
3489-
// twice.
3490-
if (auto tagDecl = dyn_cast<clang::TagDecl>(nd))
3491-
if (tagDecl->getDefinition() != tagDecl)
3492-
continue;
34933493
nestedTypes.push_back(nestedType);
34943494
continue;
34953495
}

test/Interop/Cxx/class/Inputs/nested-records.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ struct HasForwardDeclaredNestedType {
5151
struct ForwardDeclaredType { };
5252
};
5353

54+
struct HasForwardDeclaredTemplateChild {
55+
template <class T> struct ForwardDeclaredClassTemplate;
56+
57+
struct DeclaresForwardDeclaredClassTemplateFriend {
58+
template <class T>
59+
friend struct HasForwardDeclaredTemplateChild::ForwardDeclaredClassTemplate;
60+
};
61+
62+
template <class T> struct ForwardDeclaredClassTemplate { };
63+
};
64+
65+
5466
// TODO: Nested class templates (SR-13853).
5567

5668
#endif // TEST_INTEROP_CXX_CLASS_INPUTS_NESTED_RECORDS_H

test/Interop/Cxx/class/nested-records-module-interface.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,19 @@
5757
// CHECK: }
5858

5959
// CHECK: struct HasForwardDeclaredNestedType {
60+
// CHECK: struct ForwardDeclaredType {
61+
// CHECK: init()
62+
// CHECK: }
6063
// CHECK: struct NormalSubType {
6164
// CHECK: init()
6265
// CHECK: }
63-
// CHECK: struct ForwardDeclaredType {
66+
// CHECK: init()
67+
// CHECK: }
68+
69+
// CHECK: struct HasForwardDeclaredTemplateChild {
70+
// CHECK: struct ForwardDeclaredClassTemplate<T> {
71+
// CHECK: }
72+
// CHECK: struct DeclaresForwardDeclaredClassTemplateFriend {
6473
// CHECK: init()
6574
// CHECK: }
6675
// CHECK: init()

0 commit comments

Comments
 (0)