Skip to content

Commit 5c1c6a0

Browse files
authored
Merge pull request #1060 from xymus/dont-verify-if-compat-header
swiftinterface verification: disable verification for modules with generated headers
2 parents 29486f5 + f6b4104 commit 5c1c6a0

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
@@ -5077,6 +5077,16 @@ final class SwiftDriverTests: XCTestCase {
50775077
let verifyJob = plannedJobs.first(where: { $0.kind == .verifyModuleInterface })!
50785078
XCTAssertFalse(verifyJob.commandLine.contains(.flag("-check-api-availability-only")))
50795079
}
5080+
5081+
// Don't verify modules with compatibility headers.
5082+
do {
5083+
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
5084+
"foo", "-emit-module-interface",
5085+
"-enable-library-evolution", "-emit-objc-header-path", "foo-Swift.h"],
5086+
env: envVars)
5087+
let plannedJobs = try driver.planBuild()
5088+
XCTAssertEqual(plannedJobs.filter( { job in job.kind == .verifyModuleInterface}).count, 0)
5089+
}
50805090
}
50815091

50825092
func testPCHGeneration() throws {

0 commit comments

Comments
 (0)