Skip to content

Commit 8922166

Browse files
committed
Verify emitted modules interfaces of public frameworks by default
rdar://82987741
1 parent af42b87 commit 8922166

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
@@ -4107,6 +4107,30 @@ final class SwiftDriverTests: XCTestCase {
41074107
XCTAssertTrue(verifyJob.inputs[0] == emitInterfaceOutput[0])
41084108
XCTAssertTrue(verifyJob.commandLine.contains(.path(emitInterfaceOutput[0].file)))
41094109
}
4110+
4111+
// Enabled by default when the library-level is api.
4112+
do {
4113+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
4114+
"foo", "-emit-module-interface",
4115+
"-enable-library-evolution",
4116+
"-whole-module-optimization",
4117+
"-library-level", "api"])
4118+
let plannedJobs = try driver.planBuild()
4119+
XCTAssertEqual(plannedJobs.count, 2)
4120+
XCTAssertTrue(plannedJobs.contains() {$0.kind == .verifyModuleInterface})
4121+
}
4122+
4123+
// Not enabled by default when the library-level is spi.
4124+
do {
4125+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
4126+
"foo", "-emit-module-interface",
4127+
"-enable-library-evolution",
4128+
"-whole-module-optimization",
4129+
"-library-level", "spi"])
4130+
let plannedJobs = try driver.planBuild()
4131+
XCTAssertEqual(plannedJobs.count, 1)
4132+
XCTAssertEqual(plannedJobs[0].kind, .compile)
4133+
}
41104134
}
41114135

41124136
func testPCHGeneration() throws {

0 commit comments

Comments
 (0)