Skip to content

Commit 0c88dd3

Browse files
authored
Merge pull request #832 from xymus/verify-public-swiftinterfaces
Verify emitted modules interfaces of public frameworks by default
2 parents 8b758b0 + 8922166 commit 0c88dd3

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

Sources/SwiftDriver/Jobs/Planning.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -430,11 +430,15 @@ extension Driver {
430430

431431
private mutating func addVerifyJobs(emitModuleJob: Job, addJob: (Job) -> Void )
432432
throws {
433+
// Turn this flag on by default with the env var or for public frameworks.
434+
let onByDefault = env["ENABLE_DEFAULT_INTERFACE_VERIFIER"] != nil ||
435+
parsedOptions.getLastArgument(.libraryLevel)?.asSingle == "api"
436+
433437
guard
434438
parsedOptions.hasArgument(.enableLibraryEvolution),
435439
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
436440
negative: .noVerifyEmittedModuleInterface,
437-
default: true),
441+
default: onByDefault),
438442

439443
// Don't verify by default modules emitted from a merge-module job
440444
// as it's more likely to be invalid
@@ -444,12 +448,6 @@ extension Driver {
444448
default: false)
445449
else { return }
446450

447-
// FIXME: remove this when we are confident to enable interface verification
448-
// by default.
449-
if env["ENABLE_DEFAULT_INTERFACE_VERIFIER"] == nil &&
450-
!parsedOptions.hasArgument(.verifyEmittedModuleInterface) {
451-
return
452-
}
453451
func addVerifyJob(forPrivate: Bool) throws {
454452
let isNeeded =
455453
forPrivate

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4121,6 +4121,30 @@ final class SwiftDriverTests: XCTestCase {
41214121
XCTAssertTrue(verifyJob.inputs[0] == emitInterfaceOutput[0])
41224122
XCTAssertTrue(verifyJob.commandLine.contains(.path(emitInterfaceOutput[0].file)))
41234123
}
4124+
4125+
// Enabled by default when the library-level is api.
4126+
do {
4127+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
4128+
"foo", "-emit-module-interface",
4129+
"-enable-library-evolution",
4130+
"-whole-module-optimization",
4131+
"-library-level", "api"])
4132+
let plannedJobs = try driver.planBuild()
4133+
XCTAssertEqual(plannedJobs.count, 2)
4134+
XCTAssertTrue(plannedJobs.contains() {$0.kind == .verifyModuleInterface})
4135+
}
4136+
4137+
// Not enabled by default when the library-level is spi.
4138+
do {
4139+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
4140+
"foo", "-emit-module-interface",
4141+
"-enable-library-evolution",
4142+
"-whole-module-optimization",
4143+
"-library-level", "spi"])
4144+
let plannedJobs = try driver.planBuild()
4145+
XCTAssertEqual(plannedJobs.count, 1)
4146+
XCTAssertEqual(plannedJobs[0].kind, .compile)
4147+
}
41244148
}
41254149

41264150
func testPCHGeneration() throws {

0 commit comments

Comments
 (0)