Skip to content

Commit 607df61

Browse files
authored
Merge pull request #857 from apple/mracek/lto-should-respect-dash-o-arg
Building object files using -c with -lto should respect the output file path (-o) if present
2 parents 9769aad + 2c1a43b commit 607df61

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

Sources/SwiftDriver/Jobs/CompileJob.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ extension Driver {
8585
} else {
8686
// When -lto is set, .bc will be used for linking. Otherwise, .bc is
8787
// top-level output (-emit-bc)
88-
return lto == nil
88+
return lto == nil || linkerOutputType == nil
8989
}
9090
case .swiftModule:
9191
return compilerMode.isSingleCompilation && moduleOutputInfo.output?.isTopLevel ?? false

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,28 @@ final class SwiftDriverTests: XCTestCase {
313313
XCTAssertEqual(driver6.compilerOutputType, .llvmBitcode)
314314
}
315315

316+
func testLtoOutputPath() throws {
317+
do {
318+
var driver = try Driver(args: ["swiftc", "foo.swift", "-lto=llvm-full", "-c", "-target", "x86_64-apple-macosx10.9"])
319+
XCTAssertEqual(driver.compilerOutputType, .llvmBitcode)
320+
XCTAssertEqual(driver.linkerOutputType, nil)
321+
let jobs = try driver.planBuild()
322+
XCTAssertEqual(jobs.count, 1)
323+
XCTAssertEqual(jobs[0].outputs.count, 1)
324+
XCTAssertEqual(jobs[0].outputs[0].file.basename, "foo.bc")
325+
}
326+
327+
do {
328+
var driver = try Driver(args: ["swiftc", "foo.swift", "-lto=llvm-full", "-c", "-target", "x86_64-apple-macosx10.9", "-o", "foo.o"])
329+
XCTAssertEqual(driver.compilerOutputType, .llvmBitcode)
330+
XCTAssertEqual(driver.linkerOutputType, nil)
331+
let jobs = try driver.planBuild()
332+
XCTAssertEqual(jobs.count, 1)
333+
XCTAssertEqual(jobs[0].outputs.count, 1)
334+
XCTAssertEqual(jobs[0].outputs[0].file.basename, "foo.o")
335+
}
336+
}
337+
316338
func testPrimaryOutputKindsDiagnostics() throws {
317339
try assertDriverDiagnostics(args: "swift", "-i") {
318340
$1.expect(.error("the flag '-i' is no longer required and has been removed; use 'swift input-filename'"))

0 commit comments

Comments
 (0)