diff --git a/Sources/SwiftDriver/Jobs/EmitModuleJob.swift b/Sources/SwiftDriver/Jobs/EmitModuleJob.swift index c73b0ed14..885eb60e9 100644 --- a/Sources/SwiftDriver/Jobs/EmitModuleJob.swift +++ b/Sources/SwiftDriver/Jobs/EmitModuleJob.swift @@ -80,6 +80,9 @@ extension Driver { addCommonModuleOptions(commandLine: &commandLine, outputs: &outputs, isMergeModule: false) + try commandLine.appendLast(.emitSymbolGraph, from: &parsedOptions) + try commandLine.appendLast(.emitSymbolGraphDir, from: &parsedOptions) + if parsedOptions.hasArgument(.parseAsLibrary, .emitLibrary) { commandLine.appendFlag(.parseAsLibrary) } @@ -102,6 +105,7 @@ extension Driver { var shouldCreateEmitModuleJob: Bool { mutating get { return moduleOutputInfo.output != nil + && inputFiles.allSatisfy() { $0.type.isPartOfSwiftCompilation } // Ignore calls for linking. && (forceEmitModuleBeforeCompile || shouldEmitModuleSeparately()) } @@ -111,7 +115,7 @@ extension Driver { mutating func shouldEmitModuleSeparately() -> Bool { return parsedOptions.hasFlag(positive: .emitModuleSeparately, negative: .noEmitModuleSeparately, - default: false) + default: true) && !parsedOptions.hasFlag(positive: .wholeModuleOptimization, negative: .noWholeModuleOptimization, default: false) diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index 9f843c210..31e4391a3 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -1282,7 +1282,7 @@ final class SwiftDriverTests: XCTestCase { var driver = try Driver(args: commonArgs + ["-emit-executable", "-emit-module", "-g", "-target", "x86_64-apple-macosx10.15"], env: env) let plannedJobs = try driver.planBuild() XCTAssertEqual(5, plannedJobs.count) - XCTAssertEqual(plannedJobs.map(\.kind), [.compile, .compile, .mergeModule, .link, .generateDSYM]) + XCTAssertEqual(plannedJobs.map(\.kind), [.emitModule, .compile, .compile, .link, .generateDSYM]) let linkJob = plannedJobs[3] XCTAssertEqual(linkJob.kind, .link) @@ -2083,7 +2083,6 @@ final class SwiftDriverTests: XCTestCase { let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs() XCTAssertEqual(plannedJobs.count, 2) XCTAssertEqual(plannedJobs[0].kind, .compile) - print(plannedJobs[0].commandLine.joinedUnresolvedArguments) XCTAssert(plannedJobs[0].commandLine.contains(.flag("-supplementary-output-file-map"))) } @@ -2211,7 +2210,7 @@ final class SwiftDriverTests: XCTestCase { func testEmitModuleSeparately() throws { do { - var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", "/foo/bar/Test.swiftmodule", "-experimental-emit-module-separately", "-emit-library", "-target", "x86_64-apple-macosx10.15"]) + var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", "/foo/bar/Test.swiftmodule", "-emit-symbol-graph", "-emit-symbol-graph-dir", "/foo/bar/", "-experimental-emit-module-separately", "-emit-library", "-target", "x86_64-apple-macosx10.15"]) let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 4) XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .emitModule, .link])) @@ -2221,6 +2220,9 @@ final class SwiftDriverTests: XCTestCase { XCTAssertEqual(plannedJobs[0].outputs[0].file, .absolute(AbsolutePath("/foo/bar/Test.swiftmodule"))) XCTAssertEqual(plannedJobs[0].outputs[1].file, .absolute(AbsolutePath("/foo/bar/Test.swiftdoc"))) XCTAssertEqual(plannedJobs[0].outputs[2].file, .absolute(AbsolutePath("/foo/bar/Test.swiftsourceinfo"))) + + // We don't know the output file of the symbol graph, just make sure the flag is passed along. + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-symbol-graph-dir"))) } do { @@ -2253,6 +2255,22 @@ final class SwiftDriverTests: XCTestCase { XCTAssertEqual(plannedJobs.count, 3) XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .mergeModule])) } + + do { + // Calls using the driver to link a library shouldn't trigger an emit-module job, like in LLDB tests. + var driver = try Driver(args: ["swiftc", "-emit-library", "foo.swiftmodule", "foo.o", "-emit-module-path", "foo.swiftmodule", "-experimental-emit-module-separately", "-target", "x86_64-apple-macosx10.15"]) + let plannedJobs = try driver.planBuild() + XCTAssertEqual(plannedJobs.count, 1) + XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.link])) + } + + do { + // Use emit-module to build sil files. + var driver = try Driver(args: ["swiftc", "foo.sil", "bar.sil", "-module-name", "Test", "-emit-module-path", "/foo/bar/Test.swiftmodule", "-experimental-emit-module-separately", "-emit-library", "-target", "x86_64-apple-macosx10.15"]) + let plannedJobs = try driver.planBuild() + XCTAssertEqual(plannedJobs.count, 4) + XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .emitModule, .link])) + } } func testModuleWrapJob() throws { @@ -2263,11 +2281,11 @@ final class SwiftDriverTests: XCTestCase { var driver = try Driver(args: ["swiftc", "-target", "x86_64-unknown-linux-gnu", "-g", "foo.swift"]) let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 5) - XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .mergeModule, .autolinkExtract, .moduleWrap, .link])) + XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .emitModule, .autolinkExtract, .moduleWrap, .link])) let wrapJob = plannedJobs.filter {$0.kind == .moduleWrap} .first! XCTAssertEqual(wrapJob.inputs.count, 1) XCTAssertTrue(wrapJob.commandLine.contains(subsequence: ["-target", "x86_64-unknown-linux-gnu"])) - let mergeJob = plannedJobs.filter {$0.kind == .mergeModule} .first! + let mergeJob = plannedJobs.filter {$0.kind == .emitModule} .first! XCTAssertTrue(mergeJob.outputs.contains(wrapJob.inputs.first!)) XCTAssertTrue(plannedJobs[4].inputs.contains(wrapJob.outputs.first!)) } @@ -2285,7 +2303,7 @@ final class SwiftDriverTests: XCTestCase { let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 4) // Merge module, but no module wrapping. - XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .mergeModule, .autolinkExtract, .link])) + XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.compile, .emitModule, .autolinkExtract, .link])) } #endif // dsymutil won't be found on other platforms @@ -2295,7 +2313,7 @@ final class SwiftDriverTests: XCTestCase { let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 4) // No module wrapping with Mach-O. - XCTAssertEqual(plannedJobs.map { $0.kind }, [.compile, .mergeModule, .link, .generateDSYM]) + XCTAssertEqual(plannedJobs.map { $0.kind }, [.emitModule, .compile, .link, .generateDSYM]) } #endif } @@ -3395,13 +3413,13 @@ final class SwiftDriverTests: XCTestCase { "swiftc", "-working-directory", "/Foo/Bar", "-emit-module", "/tmp/main.swift" ]) let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs() - XCTAssertEqual(plannedJobs.count, 2) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-o"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftmodule")))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-emit-module-doc-path"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftdoc")))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-emit-module-source-info-path"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftsourceinfo")))) + XCTAssertEqual(plannedJobs.count, 1) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-o"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftmodule")))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-module-doc-path"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftdoc")))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-module-source-info-path"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftsourceinfo")))) } func testDOTFileEmission() throws { @@ -3511,14 +3529,14 @@ final class SwiftDriverTests: XCTestCase { "swiftc", "-emit-module", "/tmp/main.swift", "-emit-module-path", "test-ios-macabi.swiftmodule" ]) let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs() - XCTAssertEqual(plannedJobs.count, 2) - XCTAssertTrue(plannedJobs[1].kind == .mergeModule) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-o"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftmodule")))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-emit-module-doc-path"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftdoc")))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.flag("-emit-module-source-info-path"))) - XCTAssertTrue(plannedJobs[1].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftsourceinfo")))) + XCTAssertEqual(plannedJobs.count, 1) + XCTAssertTrue(plannedJobs[0].kind == .emitModule) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-o"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftmodule")))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-module-doc-path"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftdoc")))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-module-source-info-path"))) + XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftsourceinfo")))) } func testToolchainClangPath() throws { @@ -3921,7 +3939,6 @@ final class SwiftDriverTests: XCTestCase { var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-bc", "-target", "x86_64-apple-macosx10.9"]) let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 1) - print(plannedJobs[0].commandLine.description) XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-bc"))) XCTAssertEqual(plannedJobs[0].outputs.first!.file, VirtualPath.relative(RelativePath("foo.bc"))) } @@ -3956,13 +3973,11 @@ final class SwiftDriverTests: XCTestCase { throw XCTSkip("Skipping: compiler does not support '-user-module-version'") } let plannedJobs = try driver.planBuild() - XCTAssertEqual(plannedJobs.count, 2) - let compileJob = plannedJobs[0] - let mergeJob = plannedJobs[1] - XCTAssertEqual(compileJob.kind, .compile) - XCTAssertEqual(mergeJob.kind, .mergeModule) - XCTAssertTrue(mergeJob.commandLine.contains(.flag("-user-module-version"))) - XCTAssertTrue(mergeJob.commandLine.contains(.flag("12.21"))) + XCTAssertEqual(plannedJobs.count, 1) + let emitModuleJob = plannedJobs[0] + XCTAssertEqual(emitModuleJob.kind, .emitModule) + XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("-user-module-version"))) + XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("12.21"))) } } @@ -3976,13 +3991,11 @@ final class SwiftDriverTests: XCTestCase { "-verify-emitted-module-interface", "-enable-library-evolution"]) let plannedJobs = try driver.planBuild() - XCTAssertEqual(plannedJobs.count, 3) - let compileJob = plannedJobs[0] - let mergeJob = plannedJobs[1] - let verifyJob = plannedJobs[2] - XCTAssertEqual(compileJob.kind, .compile) - XCTAssertEqual(mergeJob.kind, .mergeModule) - let mergeInterfaceOutputs = mergeJob.outputs.filter { $0.type == .swiftInterface } + XCTAssertEqual(plannedJobs.count, 2) + let emitJob = plannedJobs[0] + let verifyJob = plannedJobs[1] + XCTAssertEqual(emitJob.kind, .emitModule) + let mergeInterfaceOutputs = emitJob.outputs.filter { $0.type == .swiftInterface } XCTAssertTrue(mergeInterfaceOutputs.count == 1, "Merge module job should only have one swiftinterface output") XCTAssertEqual(verifyJob.kind, .verifyModuleInterface) @@ -3997,7 +4010,7 @@ final class SwiftDriverTests: XCTestCase { var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name", "foo", "-emit-module-interface", "-verify-emitted-module-interface"], env: envVars) let plannedJobs = try driver.planBuild() - XCTAssertEqual(plannedJobs.count, 2) + XCTAssertEqual(plannedJobs.count, 1) } // Explicitly disabled @@ -4007,7 +4020,7 @@ final class SwiftDriverTests: XCTestCase { "-enable-library-evolution", "-no-verify-emitted-module-interface"], env: envVars) let plannedJobs = try driver.planBuild() - XCTAssertEqual(plannedJobs.count, 2) + XCTAssertEqual(plannedJobs.count, 1) } // Disabled by default in merge-module @@ -4255,7 +4268,7 @@ final class SwiftDriverTests: XCTestCase { XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir"))) XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch")))) - XCTAssertEqual(plannedJobs[1].kind, .compile) + XCTAssertEqual(plannedJobs[1].kind, .emitModule) XCTAssertEqual(plannedJobs[1].inputs.count, 2) XCTAssertEqual(plannedJobs[1].inputs[0].file, try VirtualPath(path: "foo.swift")) XCTAssert(plannedJobs[1].commandLine.contains(.flag("-pch-disable-validation"))) @@ -4454,11 +4467,8 @@ final class SwiftDriverTests: XCTestCase { let compileJob = plannedJobs.first(where: {$0.kind == .compile})! XCTAssertEqual(compileJob.inputs.count, 1) XCTAssertEqual(compileJob.inputs[0].file, .relative(RelativePath("embed-bitcode.swift"))) - XCTAssertEqual(compileJob.outputs.count, 4) + XCTAssertEqual(compileJob.outputs.count, 1) XCTAssertTrue(matchTemporary(compileJob.outputs[0].file, "embed-bitcode.bc")) - XCTAssertTrue(matchTemporary(compileJob.outputs[1].file, "embed-bitcode.swiftmodule")) - XCTAssertTrue(matchTemporary(compileJob.outputs[2].file, "embed-bitcode.swiftdoc")) - XCTAssertTrue(matchTemporary(compileJob.outputs[3].file, "embed-bitcode.swiftsourceinfo")) let backendJob = plannedJobs.first(where: {$0.kind == .backend})! XCTAssertEqual(backendJob.inputs.count, 1) @@ -4466,13 +4476,13 @@ final class SwiftDriverTests: XCTestCase { XCTAssertEqual(backendJob.outputs.count, 1) XCTAssertEqual(backendJob.outputs[0].file, .relative(RelativePath("embed-bitcode.o"))) - XCTAssertEqual(plannedJobs[2].kind, .mergeModule) - XCTAssertEqual(plannedJobs[2].inputs.count, 1) - XCTAssertTrue(matchTemporary(plannedJobs[2].inputs[0].file, "embed-bitcode.swiftmodule")) - XCTAssertEqual(plannedJobs[2].outputs.count, 3) - XCTAssertEqual(plannedJobs[2].outputs[0].file, .relative(RelativePath("main.swiftmodule"))) - XCTAssertEqual(plannedJobs[2].outputs[1].file, .relative(RelativePath("main.swiftdoc"))) - XCTAssertEqual(plannedJobs[2].outputs[2].file, .relative(RelativePath("main.swiftsourceinfo"))) + let emitModuleJob = plannedJobs.first(where: {$0.kind == .emitModule})! + XCTAssertEqual(emitModuleJob.inputs.count, 1) + XCTAssertEqual(emitModuleJob.inputs[0].file, .relative(RelativePath("embed-bitcode.swift"))) + XCTAssertEqual(emitModuleJob.outputs.count, 3) + XCTAssertEqual(emitModuleJob.outputs[0].file, .relative(RelativePath("main.swiftmodule"))) + XCTAssertEqual(emitModuleJob.outputs[1].file, .relative(RelativePath("main.swiftdoc"))) + XCTAssertEqual(emitModuleJob.outputs[2].file, .relative(RelativePath("main.swiftsourceinfo"))) } do { @@ -4502,35 +4512,35 @@ final class SwiftDriverTests: XCTestCase { let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs() XCTAssertEqual(plannedJobs.count, 5) - XCTAssertEqual(plannedJobs[0].kind, .compile) - XCTAssertEqual(plannedJobs[0].outputs.count, 4) - XCTAssertTrue(matchTemporary(plannedJobs[0].outputs[0].file, "embed-bitcode.bc")) - - XCTAssertEqual(plannedJobs[1].kind, .backend) - XCTAssertEqual(plannedJobs[1].inputs.count, 1) - XCTAssertTrue(matchTemporary(plannedJobs[1].inputs[0].file, "embed-bitcode.bc")) + XCTAssertEqual(plannedJobs[1].kind, .compile) XCTAssertEqual(plannedJobs[1].outputs.count, 1) - XCTAssertEqual(plannedJobs[1].outputs[0].file, .relative(RelativePath("embed-bitcode.o"))) + XCTAssertTrue(matchTemporary(plannedJobs[1].outputs[0].file, "embed-bitcode.bc")) - XCTAssertEqual(plannedJobs[2].kind, .compile) - XCTAssertEqual(plannedJobs[2].outputs.count, 4) - XCTAssertTrue(matchTemporary(plannedJobs[2].outputs[0].file, "empty.bc")) - - XCTAssertEqual(plannedJobs[3].kind, .backend) - XCTAssertEqual(plannedJobs[3].inputs.count, 1) - XCTAssertTrue(matchTemporary(plannedJobs[3].inputs[0].file, "empty.bc")) + XCTAssertEqual(plannedJobs[2].kind, .backend) + XCTAssertEqual(plannedJobs[2].inputs.count, 1) + XCTAssertTrue(matchTemporary(plannedJobs[2].inputs[0].file, "embed-bitcode.bc")) + XCTAssertEqual(plannedJobs[2].outputs.count, 1) + XCTAssertEqual(plannedJobs[2].outputs[0].file, .relative(RelativePath("embed-bitcode.o"))) + XCTAssertEqual(plannedJobs[3].kind, .compile) XCTAssertEqual(plannedJobs[3].outputs.count, 1) - XCTAssertEqual(plannedJobs[3].outputs[0].file, .relative(RelativePath("empty.o"))) + XCTAssertTrue(matchTemporary(plannedJobs[3].outputs[0].file, "empty.bc")) + + XCTAssertEqual(plannedJobs[4].kind, .backend) + XCTAssertEqual(plannedJobs[4].inputs.count, 1) + XCTAssertTrue(matchTemporary(plannedJobs[4].inputs[0].file, "empty.bc")) - XCTAssertEqual(plannedJobs[4].kind, .mergeModule) - XCTAssertEqual(plannedJobs[4].inputs.count, 2) - XCTAssertTrue(matchTemporary(plannedJobs[4].inputs[0].file, "embed-bitcode.swiftmodule")) - XCTAssertTrue(matchTemporary(plannedJobs[4].inputs[1].file, "empty.swiftmodule")) - XCTAssertEqual(plannedJobs[4].outputs.count, 3) - XCTAssertEqual(plannedJobs[4].outputs[0].file, .relative(RelativePath("ABC.swiftmodule"))) - XCTAssertEqual(plannedJobs[4].outputs[1].file, .relative(RelativePath("ABC.swiftdoc"))) - XCTAssertEqual(plannedJobs[4].outputs[2].file, .relative(RelativePath("ABC.swiftsourceinfo"))) + XCTAssertEqual(plannedJobs[4].outputs.count, 1) + XCTAssertEqual(plannedJobs[4].outputs[0].file, .relative(RelativePath("empty.o"))) + + let emitModuleJob = plannedJobs.first(where: { $0.kind == .emitModule })! + XCTAssertEqual(emitModuleJob.inputs.count, 2) + XCTAssertEqual(emitModuleJob.inputs[0].file, .relative(RelativePath("embed-bitcode.swift"))) + XCTAssertEqual(emitModuleJob.inputs[1].file, .relative(RelativePath("empty.swift"))) + XCTAssertEqual(emitModuleJob.outputs.count, 3) + XCTAssertEqual(emitModuleJob.outputs[0].file, .relative(RelativePath("ABC.swiftmodule"))) + XCTAssertEqual(emitModuleJob.outputs[1].file, .relative(RelativePath("ABC.swiftdoc"))) + XCTAssertEqual(emitModuleJob.outputs[2].file, .relative(RelativePath("ABC.swiftsourceinfo"))) } do { @@ -4779,12 +4789,12 @@ final class SwiftDriverTests: XCTestCase { do { var driver = try Driver(args: ["swiftc", "-emit-module", "foo.swift"]) let plannedJobs = try driver.planBuild() - let compileJob = plannedJobs[0] - XCTAssertTrue(compileJob.commandLine.contains(.flag("-emit-module-source-info-path"))) - XCTAssertEqual(compileJob.outputs.count, 3) - XCTAssertTrue(matchTemporary(compileJob.outputs[0].file, "foo.swiftmodule")) - XCTAssertTrue(matchTemporary(compileJob.outputs[1].file, "foo.swiftdoc")) - XCTAssertTrue(matchTemporary(compileJob.outputs[2].file, "foo.swiftsourceinfo")) + let emitModuleJob = plannedJobs[0] + XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("-emit-module-source-info-path"))) + XCTAssertEqual(emitModuleJob.outputs.count, 3) + XCTAssertTrue(emitModuleJob.outputs[0].file == VirtualPath.relative(RelativePath("foo.swiftmodule"))) + XCTAssertTrue(emitModuleJob.outputs[1].file == VirtualPath.relative(RelativePath("foo.swiftdoc"))) + XCTAssertTrue(emitModuleJob.outputs[2].file == VirtualPath.relative(RelativePath("foo.swiftsourceinfo"))) } // implicit with Project/ Directory do { @@ -4795,23 +4805,23 @@ final class SwiftDriverTests: XCTestCase { path.appending(component: "foo.swift").description, "-o", path.appending(component: "foo.swiftmodule").description]) let plannedJobs = try driver.planBuild() - let mergeModuleJob = plannedJobs[1] - XCTAssertTrue(mergeModuleJob.commandLine.contains(.flag("-emit-module-source-info-path"))) - XCTAssertEqual(mergeModuleJob.outputs.count, 3) - XCTAssertEqual(mergeModuleJob.outputs[0].file, .absolute(path.appending(component: "foo.swiftmodule"))) - XCTAssertEqual(mergeModuleJob.outputs[1].file, .absolute(path.appending(component: "foo.swiftdoc"))) - XCTAssertEqual(mergeModuleJob.outputs[2].file, .absolute(projectDirPath.appending(component: "foo.swiftsourceinfo"))) + let emitModuleJob = plannedJobs[0] + XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("-emit-module-source-info-path"))) + XCTAssertEqual(emitModuleJob.outputs.count, 3) + XCTAssertEqual(emitModuleJob.outputs[0].file, .absolute(path.appending(component: "foo.swiftmodule"))) + XCTAssertEqual(emitModuleJob.outputs[1].file, .absolute(path.appending(component: "foo.swiftdoc"))) + XCTAssertEqual(emitModuleJob.outputs[2].file, .absolute(projectDirPath.appending(component: "foo.swiftsourceinfo"))) } } // avoid implicit swiftsourceinfo do { var driver = try Driver(args: ["swiftc", "-emit-module", "-avoid-emit-module-source-info", "foo.swift"]) let plannedJobs = try driver.planBuild() - let compileJob = plannedJobs[0] - XCTAssertFalse(compileJob.commandLine.contains(.flag("-emit-module-source-info-path"))) - XCTAssertEqual(compileJob.outputs.count, 2) - XCTAssertTrue(matchTemporary(compileJob.outputs[0].file, "foo.swiftmodule")) - XCTAssertTrue(matchTemporary(compileJob.outputs[1].file, "foo.swiftdoc")) + let emitModuleJob = plannedJobs[0] + XCTAssertFalse(emitModuleJob.commandLine.contains(.flag("-emit-module-source-info-path"))) + XCTAssertEqual(emitModuleJob.outputs.count, 2) + XCTAssertTrue(emitModuleJob.outputs[0].file == VirtualPath.relative(RelativePath("foo.swiftmodule"))) + XCTAssertTrue(emitModuleJob.outputs[1].file == VirtualPath.relative(RelativePath("foo.swiftdoc"))) } }