Skip to content

Commit f6b4104

Browse files
committed
swiftinterface verification: disable verify for modules with generated headers
Swiftinterface verification is incompatible with modules using generated headers. Let's disable verification automatically in such a case.
1 parent a2bdd28 commit f6b4104

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

Sources/SwiftDriver/Jobs/Planning.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -445,17 +445,27 @@ extension Driver {
445445
parsedOptions.getLastArgument(.libraryLevel)?.asSingle == "api"
446446

447447
guard
448-
parsedOptions.hasArgument(.enableLibraryEvolution),
449-
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
450-
negative: .noVerifyEmittedModuleInterface,
451-
default: onByDefault),
448+
// Only verify modules with library evolution.
449+
parsedOptions.hasArgument(.enableLibraryEvolution),
450+
451+
// Only verify when requested, on by default and not disabled.
452+
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
453+
negative: .noVerifyEmittedModuleInterface,
454+
default: onByDefault),
452455

453456
// Don't verify by default modules emitted from a merge-module job
454457
// as it's more likely to be invalid.
455458
emitModuleSeparately || compilerMode == .singleCompile ||
456-
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
457-
negative: .noVerifyEmittedModuleInterface,
458-
default: false)
459+
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
460+
negative: .noVerifyEmittedModuleInterface,
461+
default: false),
462+
463+
// Don't verify by default modules emitting a compatibility header. This is
464+
// unsupported as the headers are merged after all archs are built. rdar://90864986
465+
self.objcGeneratedHeaderPath == nil ||
466+
parsedOptions.hasFlag(positive: .verifyEmittedModuleInterface,
467+
negative: .noVerifyEmittedModuleInterface,
468+
default: false)
459469
else { return }
460470

461471
let optIn = env["ENABLE_DEFAULT_INTERFACE_VERIFIER"] != nil ||

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4985,6 +4985,16 @@ final class SwiftDriverTests: XCTestCase {
49854985
let verifyJob = plannedJobs.first(where: { $0.kind == .verifyModuleInterface })!
49864986
XCTAssertFalse(verifyJob.commandLine.contains(.flag("-check-api-availability-only")))
49874987
}
4988+
4989+
// Don't verify modules with compatibility headers.
4990+
do {
4991+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
4992+
"foo", "-emit-module-interface",
4993+
"-enable-library-evolution", "-emit-objc-header-path", "foo-Swift.h"],
4994+
env: envVars)
4995+
let plannedJobs = try driver.planBuild()
4996+
XCTAssertEqual(plannedJobs.filter( { job in job.kind == .verifyModuleInterface}).count, 0)
4997+
}
49884998
}
49894999

49905000
func testPCHGeneration() throws {

0 commit comments

Comments
 (0)