mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
ModuleInterface: Print imports shadowed by a cross-import overlay
In some cases this import may be superfluous as it's also `@_exported` imported by the overlay. However, when the overlay is hidden and the import not printed, the import can go entierly missing.
This commit is contained in:
@@ -240,7 +240,8 @@ static void printImports(raw_ostream &out,
|
||||
// it's not obvious what higher-level optimization would be factored out here.
|
||||
ModuleDecl::ImportFilter allImportFilter = {
|
||||
ModuleDecl::ImportFilterKind::Exported,
|
||||
ModuleDecl::ImportFilterKind::Default};
|
||||
ModuleDecl::ImportFilterKind::Default,
|
||||
ModuleDecl::ImportFilterKind::ShadowedByCrossImportOverlay};
|
||||
|
||||
// With -experimental-spi-imports:
|
||||
// When printing the private or package swiftinterface file, print implementation-only
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %FileCheck %s < %t.swiftinterface
|
||||
// RUN: %FileCheck -check-prefix NEGATIVE %s < %t.swiftinterface
|
||||
|
||||
//
|
||||
// Should fail with -disable-cross-import-overlays
|
||||
@@ -38,9 +37,9 @@ public func shadow(_: DeclaringLibrary.ShadowTy, _: ShadowTy) {}
|
||||
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
|
||||
|
||||
// CHECK-DAG: import Swift
|
||||
// CHECK-DAG: import DeclaringLibrary
|
||||
// CHECK-DAG: import BystandingLibrary
|
||||
// CHECK-DAG: import _OverlayLibrary
|
||||
// NEGATIVE-NOT: import DeclaringLibrary
|
||||
|
||||
// CHECK-DAG: public func fn(_: DeclaringLibrary.DeclaringLibraryTy, _: BystandingLibrary.BystandingLibraryTy, _: _OverlayLibrary.OverlayLibraryTy)
|
||||
// CHECK-DAG: public func alias(_: _OverlayLibrary.OverlayLibraryTy)
|
||||
|
||||
71
test/CrossImport/with-implementation-only.swift
Normal file
71
test/CrossImport/with-implementation-only.swift
Normal file
@@ -0,0 +1,71 @@
|
||||
/// Check cross-import overlays with @_implementationOnly imports.
|
||||
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: cp -r %S/Inputs/lib-templates/* %t/
|
||||
// RUN: split-file --leading-lines %s %t
|
||||
|
||||
//--- BothPublic.swift
|
||||
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/BothPublic.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %FileCheck %t/BothPublic.swift < %t.swiftinterface
|
||||
|
||||
import DeclaringLibrary
|
||||
import BystandingLibrary
|
||||
|
||||
// CHECK: // swift-interface-format-version
|
||||
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
|
||||
// CHECK-DAG: import Swift
|
||||
// CHECK-DAG: import DeclaringLibrary
|
||||
// CHECK-DAG: import BystandingLibrary
|
||||
// CHECK-DAG: import _OverlayLibrary
|
||||
|
||||
|
||||
//--- BothHidden.swift
|
||||
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/BothHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %FileCheck %t/BothHidden.swift < %t.swiftinterface
|
||||
// RUN: %FileCheck -check-prefix NEGATIVE %t/BothHidden.swift < %t.swiftinterface
|
||||
|
||||
@_implementationOnly import DeclaringLibrary
|
||||
@_implementationOnly import BystandingLibrary
|
||||
|
||||
// CHECK: // swift-interface-format-version
|
||||
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
|
||||
// CHECK-DAG: import Swift
|
||||
// NEGATIVE-NOT: import DeclaringLibrary
|
||||
// NEGATIVE-NOT: import BystandingLibrary
|
||||
// NEGATIVE-NOT: import _OverlayLibrary
|
||||
|
||||
|
||||
//--- FirstHidden.swift
|
||||
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/FirstHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %FileCheck %t/FirstHidden.swift < %t.swiftinterface
|
||||
// RUN: %FileCheck -check-prefix NEGATIVE %t/FirstHidden.swift < %t.swiftinterface
|
||||
|
||||
@_implementationOnly import DeclaringLibrary
|
||||
import BystandingLibrary
|
||||
|
||||
// CHECK: // swift-interface-format-version
|
||||
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
|
||||
// CHECK-DAG: import Swift
|
||||
// CHECK-DAG: import BystandingLibrary
|
||||
// NEGATIVE-NOT: import DeclaringLibrary
|
||||
// NEGATIVE-NOT: import _OverlayLibrary
|
||||
|
||||
|
||||
//--- SecondHidden.swift
|
||||
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/SecondHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
|
||||
// RUN: %FileCheck %t/SecondHidden.swift < %t.swiftinterface
|
||||
// RUN: %FileCheck -check-prefix NEGATIVE %t/SecondHidden.swift < %t.swiftinterface
|
||||
|
||||
import DeclaringLibrary
|
||||
@_implementationOnly import BystandingLibrary
|
||||
|
||||
// CHECK: // swift-interface-format-version
|
||||
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
|
||||
// CHECK-DAG: import Swift
|
||||
// CHECK-DAG: import DeclaringLibrary
|
||||
// NEGATIVE-NOT: import BystandingLibrary
|
||||
// NEGATIVE-NOT: import _OverlayLibrary
|
||||
Reference in New Issue
Block a user