@@ -2855,8 +2855,9 @@ final class SwiftDriverTests: XCTestCase {
2855
2855
" -enable-library-evolution " ] )
2856
2856
2857
2857
let plannedJobs = try driver1. planBuild ( )
2858
- XCTAssertEqual ( plannedJobs. count, 2 )
2859
- let emitInterfaceJob = plannedJobs [ 0 ]
2858
+ XCTAssertEqual ( plannedJobs. count, 3 )
2859
+
2860
+ let emitInterfaceJob = try plannedJobs. findJob ( . emitModule)
2860
2861
XCTAssertTrue ( emitInterfaceJob. commandLine. contains ( . flag( " -emit-module-interface-path " ) ) )
2861
2862
XCTAssertTrue ( emitInterfaceJob. commandLine. contains ( . flag( " -emit-private-module-interface-path " ) ) )
2862
2863
}
@@ -5559,23 +5560,31 @@ final class SwiftDriverTests: XCTestCase {
5559
5560
func testVerifyEmittedInterfaceJob( ) throws {
5560
5561
// Evolution enabled
5561
5562
var envVars = ProcessEnv . vars
5562
- envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5563
5563
do {
5564
5564
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5565
5565
" foo " , " -emit-module-interface " ,
5566
+ " -emit-private-module-interface-path " , " foo.private.swiftinterface " ,
5566
5567
" -verify-emitted-module-interface " ,
5567
5568
" -enable-library-evolution " ] )
5568
5569
let plannedJobs = try driver. planBuild ( )
5569
- XCTAssertEqual ( plannedJobs. count, 3 )
5570
+ XCTAssertEqual ( plannedJobs. count, 4 )
5571
+
5572
+ // Emit-module should emit both module interface files
5570
5573
let emitJob = try plannedJobs. findJob ( . emitModule)
5571
- let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5572
- let mergeInterfaceOutputs = emitJob. outputs. filter { $0. type == . swiftInterface }
5573
- XCTAssertTrue ( mergeInterfaceOutputs. count == 1 ,
5574
- " Merge module job should only have one swiftinterface output " )
5575
- XCTAssertTrue ( verifyJob. inputs. count == 1 )
5576
- XCTAssertTrue ( verifyJob. inputs [ 0 ] == mergeInterfaceOutputs [ 0 ] )
5577
- XCTAssertTrue ( verifyJob. outputs. isEmpty)
5578
- XCTAssertTrue ( verifyJob. commandLine. contains ( . path( mergeInterfaceOutputs [ 0 ] . file) ) )
5574
+ let publicModuleInterface = emitJob. outputs. filter { $0. type == . swiftInterface }
5575
+ XCTAssertEqual ( publicModuleInterface. count, 1 )
5576
+ let privateModuleInterface = emitJob. outputs. filter { $0. type == . privateSwiftInterface }
5577
+ XCTAssertEqual ( privateModuleInterface. count, 1 )
5578
+
5579
+ // Each verify job should either check the public or the private module interface, not both.
5580
+ let verifyJobs = plannedJobs. filter { $0. kind == . verifyModuleInterface }
5581
+ XCTAssertEqual ( verifyJobs. count, 2 )
5582
+ for verifyJob in verifyJobs {
5583
+ let publicVerify = verifyJob. inputs. contains ( try XCTUnwrap ( publicModuleInterface. first) )
5584
+ let privateVerify = verifyJob. inputs. contains ( try XCTUnwrap ( privateModuleInterface. first) )
5585
+ XCTAssertNotEqual ( publicVerify, privateVerify)
5586
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5587
+ }
5579
5588
}
5580
5589
5581
5590
// No Evolution
@@ -5584,6 +5593,7 @@ final class SwiftDriverTests: XCTestCase {
5584
5593
" foo " , " -emit-module-interface " , " -verify-emitted-module-interface " ] , env: envVars)
5585
5594
let plannedJobs = try driver. planBuild ( )
5586
5595
XCTAssertEqual ( plannedJobs. count, 2 )
5596
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5587
5597
}
5588
5598
5589
5599
// Explicitly disabled
@@ -5594,6 +5604,7 @@ final class SwiftDriverTests: XCTestCase {
5594
5604
" -no-verify-emitted-module-interface " ] , env: envVars)
5595
5605
let plannedJobs = try driver. planBuild ( )
5596
5606
XCTAssertEqual ( plannedJobs. count, 2 )
5607
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5597
5608
let emitJob = try plannedJobs. findJob ( . emitModule)
5598
5609
XCTAssertTrue ( emitJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5599
5610
}
@@ -5606,16 +5617,7 @@ final class SwiftDriverTests: XCTestCase {
5606
5617
" -no-emit-module-separately " ] , env: envVars)
5607
5618
let plannedJobs = try driver. planBuild ( )
5608
5619
XCTAssertEqual ( plannedJobs. count, 2 )
5609
- }
5610
-
5611
- // Disabled when no "ENABLE_DEFAULT_INTERFACE_VERIFIER" found in the environment
5612
- do {
5613
- var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5614
- " foo " , " -emit-module-interface " ,
5615
- " -enable-library-evolution " ,
5616
- " -experimental-emit-module-separately " ] )
5617
- let plannedJobs = try driver. planBuild ( )
5618
- XCTAssertEqual ( plannedJobs. count, 2 )
5620
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5619
5621
}
5620
5622
5621
5623
// Emit-module separately
@@ -5634,6 +5636,7 @@ final class SwiftDriverTests: XCTestCase {
5634
5636
XCTAssertTrue ( verifyJob. inputs. count == 1 )
5635
5637
XCTAssertTrue ( verifyJob. inputs [ 0 ] == emitInterfaceOutput [ 0 ] )
5636
5638
XCTAssertTrue ( verifyJob. commandLine. contains ( . path( emitInterfaceOutput [ 0 ] . file) ) )
5639
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5637
5640
XCTAssertFalse ( emitJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5638
5641
XCTAssertFalse ( emitJob. commandLine. contains ( " -verify-emitted-module-interface " ) )
5639
5642
}
@@ -5656,6 +5659,7 @@ final class SwiftDriverTests: XCTestCase {
5656
5659
XCTAssertTrue ( verifyJob. inputs. count == 1 )
5657
5660
XCTAssertTrue ( verifyJob. inputs [ 0 ] == emitInterfaceOutput [ 0 ] )
5658
5661
XCTAssertTrue ( verifyJob. commandLine. contains ( . path( emitInterfaceOutput [ 0 ] . file) ) )
5662
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5659
5663
}
5660
5664
5661
5665
// Test the `-no-verify-emitted-module-interface` flag with whole-module
@@ -5680,21 +5684,63 @@ final class SwiftDriverTests: XCTestCase {
5680
5684
" -library-level " , " api " ] )
5681
5685
let plannedJobs = try driver. planBuild ( )
5682
5686
XCTAssertEqual ( plannedJobs. count, 2 )
5683
- XCTAssertTrue ( plannedJobs. containsJob ( . verifyModuleInterface) )
5687
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5688
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5684
5689
}
5685
5690
5686
- // Not enabled by default when the library-level is spi.
5691
+ // Enabled by default when the library-level is spi.
5687
5692
do {
5688
5693
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5689
5694
" foo " , " -emit-module-interface " ,
5690
5695
" -enable-library-evolution " ,
5691
5696
" -whole-module-optimization " ,
5692
5697
" -library-level " , " spi " ] )
5693
5698
let plannedJobs = try driver. planBuild ( )
5694
- XCTAssertEqual ( plannedJobs. count, 1 )
5695
- XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
5696
- let compileJob = try plannedJobs. findJob ( . compile)
5697
- XCTAssertFalse ( compileJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5699
+ XCTAssertEqual ( plannedJobs. count, 2 )
5700
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5701
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5702
+ }
5703
+
5704
+ // Errors downgraded to a warning when a module is blocklisted.
5705
+ try assertDriverDiagnostics ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5706
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5707
+ " -enable-library-evolution " ,
5708
+ " -whole-module-optimization " ,
5709
+ " -library-level " , " api " ] ) { driver, verify in
5710
+ let plannedJobs = try driver. planBuild ( )
5711
+ XCTAssertEqual ( plannedJobs. count, 2 )
5712
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5713
+ if driver. isFrontendArgSupported ( . downgradeTypecheckInterfaceError) {
5714
+ XCTAssertTrue ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5715
+ }
5716
+
5717
+ verify. expect ( . remark( " Verification of module interfaces for 'TestBlocklistedModule' set to warning only by blocklist " ) )
5718
+ }
5719
+
5720
+ // Don't downgrade to error blocklisted modules when the env var is set.
5721
+ do {
5722
+ envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5723
+ var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5724
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5725
+ " -enable-library-evolution " ,
5726
+ " -whole-module-optimization " ] , env: envVars)
5727
+ let plannedJobs = try driver. planBuild ( )
5728
+ XCTAssertEqual ( plannedJobs. count, 2 )
5729
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5730
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5731
+ }
5732
+
5733
+ // Don't downgrade to error blocklisted modules if the verify flag is set.
5734
+ do {
5735
+ var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5736
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5737
+ " -enable-library-evolution " ,
5738
+ " -whole-module-optimization " ,
5739
+ " -verify-emitted-module-interface " ] )
5740
+ let plannedJobs = try driver. planBuild ( )
5741
+ XCTAssertEqual ( plannedJobs. count, 2 )
5742
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5743
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5698
5744
}
5699
5745
5700
5746
// The flag -check-api-availability-only is not passed down to the verify job.
@@ -5726,9 +5772,6 @@ final class SwiftDriverTests: XCTestCase {
5726
5772
}
5727
5773
5728
5774
func testVerifyEmittedPackageInterface( ) throws {
5729
- var envVars = ProcessEnv . vars
5730
- envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5731
-
5732
5775
// Evolution enabled
5733
5776
do {
5734
5777
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " ,
@@ -5737,11 +5780,9 @@ final class SwiftDriverTests: XCTestCase {
5737
5780
" -emit-module-interface " ,
5738
5781
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5739
5782
" -verify-emitted-module-interface " ,
5740
- " -enable-library-evolution " ] , env : envVars )
5783
+ " -enable-library-evolution " ] )
5741
5784
5742
5785
let plannedJobs = try driver. planBuild ( )
5743
- let x = plannedJobs. first? . commandLine. joinedUnresolvedArguments ?? " "
5744
- print ( x)
5745
5786
XCTAssertEqual ( plannedJobs. count, 4 )
5746
5787
let emitJob = try plannedJobs. findJob ( . emitModule)
5747
5788
let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
@@ -5764,7 +5805,7 @@ final class SwiftDriverTests: XCTestCase {
5764
5805
" -emit-module-interface " ,
5765
5806
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5766
5807
" -enable-library-evolution " ,
5767
- " -no-verify-emitted-module-interface " ] , env : envVars )
5808
+ " -no-verify-emitted-module-interface " ] )
5768
5809
let plannedJobs = try driver. planBuild ( )
5769
5810
XCTAssertEqual ( plannedJobs. count, 2 )
5770
5811
}
@@ -5777,7 +5818,7 @@ final class SwiftDriverTests: XCTestCase {
5777
5818
" -emit-module-interface " ,
5778
5819
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5779
5820
" -enable-library-evolution " ,
5780
- " -experimental-emit-module-separately " ] , env : envVars )
5821
+ " -experimental-emit-module-separately " ] )
5781
5822
let plannedJobs = try driver. planBuild ( )
5782
5823
XCTAssertEqual ( plannedJobs. count, 4 )
5783
5824
let emitJob = try plannedJobs. findJob ( . emitModule)
0 commit comments