Skip to content

Commit f2ad68b

Browse files
[Caching] Issue a warning when caching build without explicit module
Issue a warning and disable compile job caching when explicit module is not enabled. This prevents swift-driver attempting to planning a caching build using implicit build, which will result into either a build system crash or bad swift-frontend invocations. rdar://121206439
1 parent 2df495a commit f2ad68b

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -638,8 +638,18 @@ public struct Driver {
638638
diagnosticEngine: diagnosticsEngine,
639639
compilerMode: compilerMode)
640640

641-
let cachingEnableOverride = parsedOptions.hasArgument(.driverExplicitModuleBuild) && env.keys.contains("SWIFT_ENABLE_CACHING")
642-
self.enableCaching = parsedOptions.hasArgument(.cacheCompileJob) || cachingEnableOverride
641+
let cachingEnabled = parsedOptions.hasArgument(.cacheCompileJob) || env.keys.contains("SWIFT_ENABLE_CACHING")
642+
if cachingEnabled {
643+
if !parsedOptions.hasArgument(.driverExplicitModuleBuild) {
644+
diagnosticsEngine.emit(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching"),
645+
location: nil)
646+
self.enableCaching = false
647+
} else {
648+
self.enableCaching = true
649+
}
650+
} else {
651+
self.enableCaching = false
652+
}
643653
self.useClangIncludeTree = !parsedOptions.hasArgument(.noClangIncludeTree) && !env.keys.contains("SWIFT_CACHING_USE_CLANG_CAS_FS")
644654
self.scannerPrefixMap = try Self.computeScanningPrefixMapper(&parsedOptions)
645655
if let sdkMapping = parsedOptions.getLastArgument(.scannerPrefixMapSdk)?.asSingle {

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7605,6 +7605,13 @@ final class SwiftDriverTests: XCTestCase {
76057605
}
76067606
}
76077607
}
7608+
7609+
func testCachingBuildOptions() throws {
7610+
try assertDriverDiagnostics(args: "swiftc", "foo.swift", "-emit-module", "-cache-compile-job") {
7611+
$1.expect(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching"))
7612+
}
7613+
try assertNoDriverDiagnostics(args: "swiftc", "foo.swift", "-emit-module", "-cache-compile-job", "-explicit-module-build")
7614+
}
76087615
}
76097616

76107617
func assertString(

0 commit comments

Comments
 (0)