diff --git a/Sources/SwiftDriver/Driver/Driver.swift b/Sources/SwiftDriver/Driver/Driver.swift index da55c1480..91961e7b4 100644 --- a/Sources/SwiftDriver/Driver/Driver.swift +++ b/Sources/SwiftDriver/Driver/Driver.swift @@ -638,8 +638,18 @@ public struct Driver { diagnosticEngine: diagnosticsEngine, compilerMode: compilerMode) - let cachingEnableOverride = parsedOptions.hasArgument(.driverExplicitModuleBuild) && env.keys.contains("SWIFT_ENABLE_CACHING") - self.enableCaching = parsedOptions.hasArgument(.cacheCompileJob) || cachingEnableOverride + let cachingEnabled = parsedOptions.hasArgument(.cacheCompileJob) || env.keys.contains("SWIFT_ENABLE_CACHING") + if cachingEnabled { + if !parsedOptions.hasArgument(.driverExplicitModuleBuild) { + diagnosticsEngine.emit(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching"), + location: nil) + self.enableCaching = false + } else { + self.enableCaching = true + } + } else { + self.enableCaching = false + } self.useClangIncludeTree = !parsedOptions.hasArgument(.noClangIncludeTree) && !env.keys.contains("SWIFT_CACHING_USE_CLANG_CAS_FS") self.scannerPrefixMap = try Self.computeScanningPrefixMapper(&parsedOptions) if let sdkMapping = parsedOptions.getLastArgument(.scannerPrefixMapSdk)?.asSingle { diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index f44112a31..39cc6a157 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -7609,6 +7609,13 @@ final class SwiftDriverTests: XCTestCase { } } } + + func testCachingBuildOptions() throws { + try assertDriverDiagnostics(args: "swiftc", "foo.swift", "-emit-module", "-cache-compile-job") { + $1.expect(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching")) + } + try assertNoDriverDiagnostics(args: "swiftc", "foo.swift", "-emit-module", "-cache-compile-job", "-explicit-module-build") + } } func assertString(