Skip to content

Commit d707dc4

Browse files
authored
Merge pull request #64516 from xymus/remark-transitive
[Serialization] Remark on transitive dependencies and loading requirement
2 parents 9a1a2c3 + 411460a commit d707dc4

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,11 @@ REMARK(module_loaded,none,
10411041
"%select{| (overlay for a clang dependency)}1"
10421042
"; source: '%2', loaded: '%3'",
10431043
(Identifier, unsigned, StringRef, StringRef))
1044+
1045+
REMARK(transitive_dependency_behavior,none,
1046+
"%1 has %select{a required|an optional|an ignored}2 "
1047+
"transitive dependency on '%0'",
1048+
(StringRef, Identifier, unsigned))
10441049

10451050
REMARK(explicit_interface_build_skipped,none,
10461051
"Skipped rebuilding module at %0 - up-to-date",

lib/Serialization/ModuleFile.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "ModuleFormat.h"
1818
#include "swift/Serialization/SerializationOptions.h"
1919
#include "swift/Subsystems.h"
20+
#include "swift/AST/DiagnosticsSema.h"
2021
#include "swift/AST/ASTContext.h"
2122
#include "swift/AST/ASTMangler.h"
2223
#include "swift/AST/GenericSignature.h"
@@ -197,6 +198,14 @@ Status ModuleFile::associateWithFileContext(FileUnit *file, SourceLoc diagLoc,
197198
ModuleLoadingBehavior transitiveBehavior =
198199
getTransitiveLoadingBehavior(dependency);
199200

201+
if (ctx.LangOpts.EnableModuleLoadingRemarks) {
202+
ctx.Diags.diagnose(diagLoc,
203+
diag::transitive_dependency_behavior,
204+
dependency.Core.getPrettyPrintedPath(),
205+
M->getName(),
206+
unsigned(transitiveBehavior));
207+
}
208+
200209
// Skip this dependency?
201210
if (transitiveBehavior == ModuleLoadingBehavior::Ignored)
202211
continue;

test/Index/index_only_sdk_system_modules.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,10 @@ module LocalSystemModule [system] { }
5858

5959
@testable import LocalSystemModule // expected-error {{module 'LocalSystemModule' was not compiled for testing}}
6060
// expected-remark @-1 {{LocalSystemModule.swiftinterface}}
61+
// expected-remark @-2 {{'LocalSystemModule' has a required transitive dependency on 'LocalSystemModule'}}
62+
// expected-remark @-3 {{'LocalSystemModule' has a required transitive dependency on 'Swift'}}
63+
// expected-remark @-4 {{'LocalSystemModule' has a required transitive dependency on 'SwiftOnoneSupport'}}
64+
// expected-remark @-5 {{'LocalSystemModule' has a required transitive dependency on '_Concurrency'}}
65+
// expected-remark @-6 {{'LocalSystemModule' has a required transitive dependency on '_StringProcessing'}}
66+
// expected-remark @-7 {{'LocalSystemModule' has a required transitive dependency on '_SwiftConcurrencyShims'}}
67+

test/ModuleInterface/loading-remarks.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ import SwiftDependency
4949
import SwiftNonResilientDependency
5050
import DirectMixedDependency
5151

52+
// CHECK: remark: 'Swift' has a required transitive dependency on 'SwiftShims'
5253
// CHECK: remark: loaded module 'SwiftShims'; source: '{{.*}}module.modulemap', loaded: '{{.*}}SwiftShims-{{.*}}.pcm'
5354
// CHECK: remark: loaded module 'Swift'; source: '{{.*}}Swift.swiftmodule{{.*}}.swiftinterface', loaded: '{{.*}}Swift.swiftmodule{{.*}}.swiftmodule'
55+
// CHECK: remark: 'SwiftDependency' has a required transitive dependency on 'Swift'
5456
// CHECK: remark: loaded module 'SwiftDependency'; source: '{{.*}}SwiftDependency.swiftinterface', loaded: '{{.*}}SwiftDependency-{{.*}}.swiftmodule'
5557
// CHECK: remark: loaded module 'SwiftNonResilientDependency'; source: '{{.*}}SwiftNonResilientDependency.swiftmodule', loaded: '{{.*}}SwiftNonResilientDependency.swiftmodule'
5658
// CHECK: remark: loaded module 'IndirectMixedDependency' (overlay for a clang dependency); source: '{{.*}}IndirectMixedDependency.swiftinterface', loaded: '{{.*}}IndirectMixedDependency-{{.*}}.swiftmodule'

test/Serialization/package-dependencies.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ package import PackageDep
2525
// RUN: -package-name MyPackage -I %t \
2626
// RUN: -enable-experimental-feature AccessLevelOnImport \
2727
// RUN: -Rmodule-loading 2>&1 | %FileCheck -check-prefix=VISIBLE-PACKAGE-DEP %s
28-
// VISIBLE-PACKAGE-DEP: source: '{{.*}}PackageDep.swiftmodule'
28+
// VISIBLE-PACKAGE-DEP: loaded module 'PackageDep'
2929

3030
// RUN: %target-swift-frontend -typecheck %t/ResilientClient.swift \
3131
// RUN: -package-name NotMyPackage -I %t \
3232
// RUN: -enable-experimental-feature AccessLevelOnImport \
3333
// RUN: -Rmodule-loading 2>&1 | %FileCheck -check-prefix=HIDDEN-PACKAGE-DEP %s
34-
// HIDDEN-PACKAGE-DEP-NOT: PackageDep
34+
// HIDDEN-PACKAGE-DEP-NOT: loaded module 'PackageDep'
3535

3636
//--- ResilientClient.swift
3737
import ResilientDep

0 commit comments

Comments
 (0)