Skip to content

Commit 7f79783

Browse files
authored
Merge pull request #36111 from CodaFi/cross-over-episode
Add Real Enable/Disable Flags for Cross-Module Incremental Builds
2 parents b64bd95 + d946df7 commit 7f79783

File tree

17 files changed

+86
-57
lines changed

17 files changed

+86
-57
lines changed

include/swift/Frontend/FrontendOptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class FrontendOptions {
298298
///
299299
/// This flag is currently only propagated from the driver to
300300
/// any merge-modules jobs.
301-
bool EnableExperimentalCrossModuleIncrementalBuild = false;
301+
bool DisableCrossModuleIncrementalBuild = false;
302302

303303
/// Best effort to output a .swiftmodule regardless of any compilation
304304
/// errors. SIL generation and serialization is skipped entirely when there

include/swift/Option/Options.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,18 @@ def emit_supported_features : Flag<["-"], "emit-supported-features">,
11111111
HelpText<"Emit a JSON file including all supported compiler features">, ModeOpt,
11121112
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>;
11131113

1114+
def enable_incremental_imports :
1115+
Flag<["-"], "enable-incremental-imports">,
1116+
Flags<[FrontendOption]>,
1117+
HelpText<"Enable cross-module incremental build metadata and "
1118+
"driver scheduling for Swift modules">;
1119+
1120+
def disable_incremental_imports :
1121+
Flag<["-"], "disable-incremental-imports">,
1122+
Flags<[FrontendOption]>,
1123+
HelpText<"Disable cross-module incremental build metadata and "
1124+
"driver scheduling for Swift modules">;
1125+
11141126
def index_file : Flag<["-"], "index-file">,
11151127
HelpText<"Produce index data for a source file">, ModeOpt,
11161128
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild]>;

include/swift/Serialization/SerializationOptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ namespace swift {
132132
bool SerializeAllSIL = false;
133133
bool SerializeOptionsForDebugging = false;
134134
bool IsSIB = false;
135-
bool ExperimentalCrossModuleIncrementalInfo = false;
135+
bool DisableCrossModuleIncrementalInfo = false;
136136
};
137137

138138
} // end namespace swift

lib/Driver/Driver.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,8 +1008,9 @@ Driver::buildCompilation(const ToolChain &TC,
10081008
const bool EmitFineGrainedDependencyDotFileAfterEveryImport = ArgList->hasArg(
10091009
options::
10101010
OPT_driver_emit_fine_grained_dependency_dot_file_after_every_import);
1011-
const bool EnableCrossModuleDependencies = ArgList->hasArg(
1012-
options::OPT_enable_experimental_cross_module_incremental_build);
1011+
const bool EnableCrossModuleDependencies
1012+
= ArgList->hasArg(options::OPT_enable_incremental_imports,
1013+
options::OPT_disable_incremental_imports, true);
10131014

10141015
// clang-format off
10151016
C = std::make_unique<Compilation>(

lib/Driver/ToolChains.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,9 +1050,7 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
10501050

10511051
context.Args.AddLastArg(Arguments, options::OPT_import_objc_header);
10521052

1053-
context.Args.AddLastArg(
1054-
Arguments,
1055-
options::OPT_enable_experimental_cross_module_incremental_build);
1053+
context.Args.AddLastArg(Arguments, options::OPT_disable_incremental_imports);
10561054

10571055
Arguments.push_back("-module-name");
10581056
Arguments.push_back(context.Args.MakeArgString(context.OI.ModuleName));

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ bool ArgsToFrontendOptionsConverter::convert(
103103

104104
Opts.ImportPrescan |= Args.hasArg(OPT_import_prescan);
105105

106-
Opts.EnableExperimentalCrossModuleIncrementalBuild |=
107-
Args.hasArg(OPT_enable_experimental_cross_module_incremental_build);
106+
Opts.DisableCrossModuleIncrementalBuild |=
107+
Args.hasArg(OPT_disable_incremental_imports);
108108

109109
// Always track system dependencies when scanning dependencies.
110110
if (const Arg *ModeArg = Args.getLastArg(OPT_modes_Group)) {

lib/Frontend/Frontend.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ SerializationOptions CompilerInvocation::computeSerializationOptions(
178178
opts.SerializeOptionsForDebugging.getValueOr(
179179
!isModuleExternallyConsumed(module));
180180

181-
serializationOpts.ExperimentalCrossModuleIncrementalInfo =
182-
opts.EnableExperimentalCrossModuleIncrementalBuild;
181+
serializationOpts.DisableCrossModuleIncrementalInfo =
182+
opts.DisableCrossModuleIncrementalBuild;
183183

184184
return serializationOpts;
185185
}

lib/Frontend/ModuleInterfaceBuilder.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ bool ModuleInterfaceBuilder::collectDepsForSerialization(
7979
path::native(ResourcePath);
8080

8181
auto DTDeps = SubInstance.getDependencyTracker()->getDependencies();
82-
SmallVector<StringRef, 16> InitialDepNames(DTDeps.begin(), DTDeps.end());
83-
InitialDepNames.push_back(interfacePath);
84-
InitialDepNames.insert(InitialDepNames.end(),
85-
extraDependencies.begin(), extraDependencies.end());
82+
SmallVector<std::string, 16> InitialDepNames(DTDeps.begin(), DTDeps.end());
83+
auto IncDeps = SubInstance.getDependencyTracker()->getIncrementalDependencyPaths();
84+
InitialDepNames.append(IncDeps.begin(), IncDeps.end());
85+
InitialDepNames.push_back(interfacePath.str());
86+
for (const auto &extra : extraDependencies) {
87+
InitialDepNames.push_back(extra.str());
88+
}
8689
SmallString<128> Scratch;
8790

8891
for (const auto &InitialDepName : InitialDepNames) {

lib/FrontendTool/FrontendTool.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1536,7 +1536,11 @@ static bool performCompileStepsPostSILGen(CompilerInstance &Instance,
15361536

15371537
SerializationOptions serializationOpts =
15381538
Invocation.computeSerializationOptions(outs, Instance.getMainModule());
1539-
if (serializationOpts.ExperimentalCrossModuleIncrementalInfo) {
1539+
1540+
const bool canEmitIncrementalInfoIntoModule =
1541+
!serializationOpts.DisableCrossModuleIncrementalInfo &&
1542+
(Action == FrontendOptions::ActionType::MergeModules);
1543+
if (canEmitIncrementalInfoIntoModule) {
15401544
const auto alsoEmitDotFile =
15411545
Instance.getInvocation()
15421546
.getLangOptions()

lib/FrontendTool/LoadedModuleTrace.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,11 @@ static void computeSwiftModuleTraceInfo(
577577
path::replace_extension(modPath, swiftInterfaceExt);
578578
};
579579

580-
for (auto &depPath : depTracker.getDependencies()) {
580+
auto deps = depTracker.getDependencies();
581+
SmallVector<std::string, 16> dependencies{deps.begin(), deps.end()};
582+
auto incrDeps = depTracker.getIncrementalDependencyPaths();
583+
dependencies.append(incrDeps.begin(), incrDeps.end());
584+
for (const auto &depPath : dependencies) {
581585

582586
// Decide if this is a swiftmodule based on the extension of the raw
583587
// dependency path, as the true file may have a different one.

lib/Serialization/Serialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5482,7 +5482,7 @@ void Serializer::writeToStream(
54825482
S.writeInputBlock(options);
54835483
S.writeSIL(SILMod, options.SerializeAllSIL);
54845484
S.writeAST(DC);
5485-
if (options.ExperimentalCrossModuleIncrementalInfo && DepGraph) {
5485+
if (!options.DisableCrossModuleIncrementalInfo && DepGraph) {
54865486
fine_grained_dependencies::writeFineGrainedDependencyGraph(
54875487
S.Out, *DepGraph, fine_grained_dependencies::Purpose::ForSwiftModule);
54885488
}

test/Driver/cross_module.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %empty-directory(%t/sub)
22
// RUN: echo "{\"\": {\"swift-dependencies\": \"cross_module.swiftdeps\"}}" > %t/ofm.json
3-
// RUN: %swiftc_driver -incremental -emit-module -module-name cross_module -output-file-map=%/t/ofm.json -driver-print-jobs -target x86_64-apple-macosx10.9 %s -enable-experimental-cross-module-incremental-build 2>^1 | %FileCheck -check-prefix ENABLE %s
3+
// RUN: %swiftc_driver -incremental -emit-module -module-name cross_module -output-file-map=%/t/ofm.json -driver-print-jobs -target x86_64-apple-macosx10.9 %s -disable-incremental-imports 2>^1 | %FileCheck -check-prefix ENABLE %s
44

55
// ENABLE: {{bin(/|\\\\)swift(-frontend|c)?(\.exe)?"?}} -frontend -merge-modules
6-
// ENABLE-SAME: -enable-experimental-cross-module-incremental-build
6+
// ENABLE-SAME: -disable-incremental-imports

test/Incremental/CrossModule/external-cascade.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
// Set up a clean incremental build of all three modules
1919
//
2020

21-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift
22-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
23-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
21+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift
22+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
23+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
2424

2525
//
2626
// Now change a header and ensure that the rebuild cascades outwards
@@ -29,10 +29,10 @@
2929
// RUN: rm %t/another-header.h
3030
// RUN: cp %S/Inputs/external-cascade/another-header.h %t/another-header.h
3131
// RUN: touch %t/another-header.h
32-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift 2>&1 | %FileCheck -check-prefix MODULE-C %s
33-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B %s
32+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift 2>&1 | %FileCheck -check-prefix MODULE-C %s
33+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B %s
3434
// RUN: touch %t/B.swiftmodule
35-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A %s
35+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A %s
3636

3737
// MODULE-C: Job finished: {generate-pch: bridging-header-[[BRIDGING_HEADER:.*]].pch <= bridging-header.h}
3838
// MODULE-C: Job finished: {compile: C.o <= C.swift bridging-header-[[BRIDGING_HEADER]].pch}
@@ -51,9 +51,9 @@
5151
// And ensure that the null build really is null.
5252
//
5353

54-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift 2>&1 | %FileCheck -check-prefix MODULE-C-NULL %s
55-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B-NULL %s
56-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A-NULL %s
54+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -import-objc-header %t/bridging-header.h -Xfrontend -validate-tbd-against-ir=none -driver-show-incremental -driver-show-job-lifecycle C.swift 2>&1 | %FileCheck -check-prefix MODULE-C-NULL %s
55+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B-NULL %s
56+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A-NULL %s
5757

5858
// MODULE-C-NULL: Job finished: {generate-pch: bridging-header-[[BRIDGING_HEADER:.*]].pch <= bridging-header.h}
5959
// MODULE-C-NULL: Job skipped: {compile: C.o <= C.swift bridging-header-[[BRIDGING_HEADER]].pch}

test/Incremental/CrossModule/linear.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
// Set up a clean incremental build of all three modules
1919
//
2020

21-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DOLD C.swift
22-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
23-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
21+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DOLD C.swift
22+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
23+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
2424

2525
//
2626
// Now change C and ensure that B rebuilds but A does not
2727
//
2828

29-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DNEW C.swift 2>&1 | %FileCheck -check-prefix MODULE-C %s
29+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DNEW C.swift 2>&1 | %FileCheck -check-prefix MODULE-C %s
3030
// RUN: touch %t/C.swiftmodule
31-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B %s
32-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A %s
31+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B %s
32+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A %s
3333

3434
// MODULE-C: Incremental compilation has been disabled
3535

@@ -44,9 +44,9 @@
4444
// And ensure that the null build really is null.
4545
//
4646

47-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DNEW C.swift 2>&1 | %FileCheck -check-prefix MODULE-C-NULL %s
48-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B-NULL %s
49-
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A-NULL %s
47+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle -DNEW C.swift 2>&1 | %FileCheck -check-prefix MODULE-C-NULL %s
48+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift 2>&1 | %FileCheck -check-prefix MODULE-B-NULL %s
49+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift 2>&1 | %FileCheck -check-prefix MODULE-A-NULL %s
5050

5151
// MODULE-C-NULL: Job skipped: {compile: C.o <= C.swift}
5252
// MODULE-C-NULL: Job skipped: {merge-module: C.swiftmodule <= C.o}

0 commit comments

Comments
 (0)