Skip to content

Commit f53be71

Browse files
committed
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.
1 parent 7c69bec commit f53be71

File tree

3 files changed

+74
-3
lines changed

3 files changed

+74
-3
lines changed

lib/Frontend/ModuleInterfaceSupport.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ static void printImports(raw_ostream &out,
240240
// it's not obvious what higher-level optimization would be factored out here.
241241
ModuleDecl::ImportFilter allImportFilter = {
242242
ModuleDecl::ImportFilterKind::Exported,
243-
ModuleDecl::ImportFilterKind::Default};
243+
ModuleDecl::ImportFilterKind::Default,
244+
ModuleDecl::ImportFilterKind::ShadowedByCrossImportOverlay};
244245

245246
// With -experimental-spi-imports:
246247
// When printing the private or package swiftinterface file, print implementation-only

test/CrossImport/module-interface.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
1111
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
1212
// RUN: %FileCheck %s < %t.swiftinterface
13-
// RUN: %FileCheck -check-prefix NEGATIVE %s < %t.swiftinterface
1413

1514
//
1615
// Should fail with -disable-cross-import-overlays
@@ -38,9 +37,9 @@ public func shadow(_: DeclaringLibrary.ShadowTy, _: ShadowTy) {}
3837
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
3938

4039
// CHECK-DAG: import Swift
40+
// CHECK-DAG: import DeclaringLibrary
4141
// CHECK-DAG: import BystandingLibrary
4242
// CHECK-DAG: import _OverlayLibrary
43-
// NEGATIVE-NOT: import DeclaringLibrary
4443

4544
// CHECK-DAG: public func fn(_: DeclaringLibrary.DeclaringLibraryTy, _: BystandingLibrary.BystandingLibraryTy, _: _OverlayLibrary.OverlayLibraryTy)
4645
// CHECK-DAG: public func alias(_: _OverlayLibrary.OverlayLibraryTy)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/// Check cross-import overlays with @_implementationOnly imports.
2+
3+
// RUN: %empty-directory(%t)
4+
// RUN: cp -r %S/Inputs/lib-templates/* %t/
5+
// RUN: split-file --leading-lines %s %t
6+
7+
//--- BothPublic.swift
8+
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/BothPublic.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
9+
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
10+
// RUN: %FileCheck %t/BothPublic.swift < %t.swiftinterface
11+
12+
import DeclaringLibrary
13+
import BystandingLibrary
14+
15+
// CHECK: // swift-interface-format-version
16+
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
17+
// CHECK-DAG: import Swift
18+
// CHECK-DAG: import DeclaringLibrary
19+
// CHECK-DAG: import BystandingLibrary
20+
// CHECK-DAG: import _OverlayLibrary
21+
22+
23+
//--- BothHidden.swift
24+
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/BothHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
25+
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
26+
// RUN: %FileCheck %t/BothHidden.swift < %t.swiftinterface
27+
// RUN: %FileCheck -check-prefix NEGATIVE %t/BothHidden.swift < %t.swiftinterface
28+
29+
@_implementationOnly import DeclaringLibrary
30+
@_implementationOnly import BystandingLibrary
31+
32+
// CHECK: // swift-interface-format-version
33+
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
34+
// CHECK-DAG: import Swift
35+
// NEGATIVE-NOT: import DeclaringLibrary
36+
// NEGATIVE-NOT: import BystandingLibrary
37+
// NEGATIVE-NOT: import _OverlayLibrary
38+
39+
40+
//--- FirstHidden.swift
41+
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/FirstHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
42+
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
43+
// RUN: %FileCheck %t/FirstHidden.swift < %t.swiftinterface
44+
// RUN: %FileCheck -check-prefix NEGATIVE %t/FirstHidden.swift < %t.swiftinterface
45+
46+
@_implementationOnly import DeclaringLibrary
47+
import BystandingLibrary
48+
49+
// CHECK: // swift-interface-format-version
50+
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
51+
// CHECK-DAG: import Swift
52+
// CHECK-DAG: import BystandingLibrary
53+
// NEGATIVE-NOT: import DeclaringLibrary
54+
// NEGATIVE-NOT: import _OverlayLibrary
55+
56+
57+
//--- SecondHidden.swift
58+
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %t/SecondHidden.swift -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
59+
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -enable-cross-import-overlays -I %t/lib/swift -module-name ClientLibrary
60+
// RUN: %FileCheck %t/SecondHidden.swift < %t.swiftinterface
61+
// RUN: %FileCheck -check-prefix NEGATIVE %t/SecondHidden.swift < %t.swiftinterface
62+
63+
import DeclaringLibrary
64+
@_implementationOnly import BystandingLibrary
65+
66+
// CHECK: // swift-interface-format-version
67+
// CHECK: // swift-module-flags: {{.*}} -module-name ClientLibrary
68+
// CHECK-DAG: import Swift
69+
// CHECK-DAG: import DeclaringLibrary
70+
// NEGATIVE-NOT: import BystandingLibrary
71+
// NEGATIVE-NOT: import _OverlayLibrary

0 commit comments

Comments
 (0)