From e0dd9a84836870e1fd0d07b7b8970ede017263a2 Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Sat, 19 Aug 2023 23:20:29 -0700 Subject: [PATCH] Pass -experimental-lazy-typecheck to -emit-module jobs. Resolves rdar://114203755 --- Sources/SwiftDriver/Driver/Driver.swift | 4 ++-- Sources/SwiftDriver/Jobs/EmitModuleJob.swift | 3 +++ Sources/SwiftOptions/Option.swift | 2 +- Sources/SwiftOptions/Options.swift | 1 + Tests/SwiftDriverTests/SwiftDriverTests.swift | 12 ++++++++++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Sources/SwiftDriver/Driver/Driver.swift b/Sources/SwiftDriver/Driver/Driver.swift index 21a0dd410..21af10e04 100644 --- a/Sources/SwiftDriver/Driver/Driver.swift +++ b/Sources/SwiftDriver/Driver/Driver.swift @@ -2092,8 +2092,8 @@ extension Driver { case .indexFile: compilerOutputType = .indexData - case .parse, .resolveImports, .typecheck, .dumpParse, - .printAst, .dumpTypeRefinementContexts, .dumpScopeMaps, + case .parse, .resolveImports, .typecheck, .experimentalLazyTypecheck, + .dumpParse, .printAst, .dumpTypeRefinementContexts, .dumpScopeMaps, .dumpInterfaceHash, .dumpTypeInfo, .verifyDebugInfo: compilerOutputType = nil diff --git a/Sources/SwiftDriver/Jobs/EmitModuleJob.swift b/Sources/SwiftDriver/Jobs/EmitModuleJob.swift index 42d7224fa..c1d4d4fb1 100644 --- a/Sources/SwiftDriver/Jobs/EmitModuleJob.swift +++ b/Sources/SwiftDriver/Jobs/EmitModuleJob.swift @@ -106,6 +106,9 @@ extension Driver { try commandLine.appendLast(.emitExtensionBlockSymbols, .omitExtensionBlockSymbols, from: &parsedOptions) try commandLine.appendLast(.symbolGraphMinimumAccessLevel, from: &parsedOptions) try commandLine.appendLast(.checkApiAvailabilityOnly, from: &parsedOptions) + if isFrontendArgSupported(.experimentalLazyTypecheck) { + try commandLine.appendLast(.experimentalLazyTypecheck, from: &parsedOptions) + } if parsedOptions.hasArgument(.parseAsLibrary, .emitLibrary) { commandLine.appendFlag(.parseAsLibrary) diff --git a/Sources/SwiftOptions/Option.swift b/Sources/SwiftOptions/Option.swift index 5535d8b6f..c63ac08bf 100644 --- a/Sources/SwiftOptions/Option.swift +++ b/Sources/SwiftOptions/Option.swift @@ -59,7 +59,7 @@ public struct Option { /// The spelling of the option, including any leading dashes. public let spelling: String - ///. The kind of option, which determines how it is parsed. + /// The kind of option, which determines how it is parsed. public let kind: Kind /// The option that this aliases, if any, as a closure that produces the diff --git a/Sources/SwiftOptions/Options.swift b/Sources/SwiftOptions/Options.swift index 72805e4ee..201961f16 100644 --- a/Sources/SwiftOptions/Options.swift +++ b/Sources/SwiftOptions/Options.swift @@ -1239,6 +1239,7 @@ extension Option { Option.ExperimentalPerformanceAnnotations, Option.platformCCallingConventionEQ, Option.platformCCallingConvention, + Option.experimentalLazyTypecheck, Option.experimentalPrintFullConvention, Option.experimentalSkipAllFunctionBodies, Option.experimentalSkipNonInlinableFunctionBodiesWithoutTypes, diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index cdddb413e..bf28891bc 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -7227,6 +7227,18 @@ final class SwiftDriverTests: XCTestCase { ])) } } + + func testEmitModuleExperimentalLazyTypecheck() throws { + var driver = try Driver(args: [ + "swiftc", "test.swift", "-module-name", "Test", "-experimental-lazy-typecheck", "-emit-module-interface" + ]) + guard driver.isFrontendArgSupported(.experimentalLazyTypecheck) else { + throw XCTSkip("Skipping: compiler does not support '-experimental-lazy-typecheck'") + } + let jobs = try driver.planBuild().removingAutolinkExtractJobs() + let emitModuleJob = try XCTUnwrap(jobs.first(where: {$0.kind == .emitModule})) + XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("-experimental-lazy-typecheck"))) + } } func assertString(