diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index de81a27d6f1f2..7e2a32da648fb 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -5851,6 +5851,11 @@ class TypePrinter : public TypeVisitor { // For the current module, consider both private and public imports. ModuleDecl::ImportFilter Filter = ModuleDecl::ImportFilterKind::Exported; Filter |= ModuleDecl::ImportFilterKind::Default; + + // For private swiftinterfaces, also look through @_spiOnly imports. + if (Options.PrintSPIs) + Filter |= ModuleDecl::ImportFilterKind::SPIOnly; + SmallVector Imports; Options.CurrentModule->getImportedModules(Imports, Filter); diff --git a/test/SPI/spi-only-swiftinterface-and-merged-decls.swift b/test/SPI/spi-only-swiftinterface-and-merged-decls.swift new file mode 100644 index 0000000000000..f772a3d0f4dec --- /dev/null +++ b/test/SPI/spi-only-swiftinterface-and-merged-decls.swift @@ -0,0 +1,43 @@ +/// Check that we correctly refer to @_spiOnly imported modules in the private +/// swiftinterface and not to one of the redeclarations. +// REQUIRES: objc_interop + +// RUN: %empty-directory(%t) +// RUN: split-file %s %t + +// RUN: %target-swift-frontend -emit-module %t/Client.swift -I %t \ +// RUN: -enable-library-evolution -swift-version 5 \ +// RUN: -experimental-spi-only-imports \ +// RUN: -emit-module-interface-path %t/Client.swiftinterface \ +// RUN: -emit-private-module-interface-path %t/Client.private.swiftinterface + +// RUN: %target-swift-typecheck-module-from-interface(%t/Client.swiftinterface) -I %t + +/// We print a reference to A in the private swiftinterface. +// RUN: %FileCheck %s < %t/Client.private.swiftinterface +// RUN: %target-swift-typecheck-module-from-interface(%t/Client.private.swiftinterface) -I %t \ +// RUN: -module-name Client + +//--- module.modulemap +module A { + header "A.h" +} + +module B { + header "B.h" +} + +//--- A.h +@interface MovingType +@end + +//--- B.h +@class MovingType; + +//--- Client.swift +import B +@_spiOnly import A + +@_spi(_) +public func foo(_ a: MovingType) {} +// CHECK: A.MovingType