Skip to content

Commit 6c3c108

Browse files
committed
Sema: Limit the warning about @_implementationOnly imports deprecation to Swift targets
Preserve the warning to use `internal import` instead of `@_implementationOnly` to imports of Swift modules only. This warning can be noisy, limiting it may prevent users from outright learning to ignore it. Typical uses of an `@_implementationOnly` import of a clang module is often for a project internal module instead of a layering concern as we have with Swift module targets. We can leave legacy uses of `@_implementationOnly` in peace for now.
1 parent 750b141 commit 6c3c108

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

lib/Sema/ImportResolution.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -818,11 +818,13 @@ void UnboundImport::validateResilience(NullablePtr<ModuleDecl> topLevelModule,
818818
import.implementationOnlyRange.isValid()) {
819819
if (SF.getParentModule()->isResilient()) {
820820
// Encourage replacing `@_implementationOnly` with `internal import`.
821-
auto inFlight =
822-
ctx.Diags.diagnose(import.importLoc,
823-
diag::implementation_only_deprecated);
824-
inFlight.fixItReplace(import.implementationOnlyRange, "internal");
825-
} else if ( // Non-resilient
821+
if (!topLevelModule.get()->isNonSwiftModule()) {
822+
auto inFlight =
823+
ctx.Diags.diagnose(import.importLoc,
824+
diag::implementation_only_deprecated);
825+
inFlight.fixItReplace(import.implementationOnlyRange, "internal");
826+
}
827+
} else if ( // Non-resilient client
826828
!(((targetName.str() == "CCryptoBoringSSL" ||
827829
targetName.str() == "CCryptoBoringSSLShims") &&
828830
(importerName.str() == "Crypto" ||

test/Sema/implementation-only-import-from-non-resilient.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,7 @@ import ClangModuleB
5353
import SwiftModuleB
5454

5555
@_implementationOnly import ClangModuleA
56-
// expected-warning @-1 {{'@_implementationOnly' is deprecated, use 'internal import' instead}}
5756
@_implementationOnly import ClangModuleA.Submodule
58-
// expected-warning @-1 {{'@_implementationOnly' is deprecated, use 'internal import' instead}}
5957
import ClangModuleB
6058

6159
//--- Crypto.swift

0 commit comments

Comments
 (0)