don't assert when a module re-exports a module and one of its symbols (#64479)

rdar://106807038
This commit is contained in:
QuietMisdreavus
2023-03-22 09:39:44 -06:00
committed by GitHub
parent 5e3e0b0fc5
commit f3ad288a9a
3 changed files with 17 additions and 0 deletions

View File

@@ -1397,6 +1397,9 @@ void ModuleDecl::getDisplayDecls(SmallVectorImpl<Decl*> &Results, bool Recursive
llvm::SmallDenseMap<ModuleDecl *, SmallPtrSet<Decl *, 4>, 4> QualifiedImports;
collectParsedExportedImports(this, Modules, QualifiedImports);
for (const auto &QI : QualifiedImports) {
auto Module = QI.getFirst();
if (Modules.contains(Module)) continue;
auto &Decls = QI.getSecond();
Results.append(Decls.begin(), Decls.end());
}

View File

@@ -0,0 +1,11 @@
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend %S/Inputs/DuplicateExportedImport/A.swift -module-name A -emit-module -emit-module-path %t/A.swiftmodule
// RUN: %target-swift-frontend %s -module-name DuplicateExportedImport -emit-module -emit-module-path /dev/null -I %t -emit-symbol-graph -emit-symbol-graph-dir %t/
// RUN: %FileCheck %s --input-file %t/DuplicateExportedImport.symbols.json
// REQUIRES: asserts
// CHECK-COUNT-1: "precise":"s:1A8ClassTwoC"
@_exported import A
@_exported import class A.ClassTwo

View File

@@ -0,0 +1,3 @@
public class ClassOne {}
public class ClassTwo {}