@@ -2881,8 +2881,9 @@ final class SwiftDriverTests: XCTestCase {
2881
2881
" -enable-library-evolution " ] )
2882
2882
2883
2883
let plannedJobs = try driver1. planBuild ( )
2884
- XCTAssertEqual ( plannedJobs. count, 2 )
2885
- let emitInterfaceJob = plannedJobs [ 0 ]
2884
+ XCTAssertEqual ( plannedJobs. count, 3 )
2885
+
2886
+ let emitInterfaceJob = try plannedJobs. findJob ( . emitModule)
2886
2887
XCTAssertTrue ( emitInterfaceJob. commandLine. contains ( . flag( " -emit-module-interface-path " ) ) )
2887
2888
XCTAssertTrue ( emitInterfaceJob. commandLine. contains ( . flag( " -emit-private-module-interface-path " ) ) )
2888
2889
}
@@ -5585,23 +5586,31 @@ final class SwiftDriverTests: XCTestCase {
5585
5586
func testVerifyEmittedInterfaceJob( ) throws {
5586
5587
// Evolution enabled
5587
5588
var envVars = ProcessEnv . vars
5588
- envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5589
5589
do {
5590
5590
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5591
5591
" foo " , " -emit-module-interface " ,
5592
+ " -emit-private-module-interface-path " , " foo.private.swiftinterface " ,
5592
5593
" -verify-emitted-module-interface " ,
5593
5594
" -enable-library-evolution " ] )
5594
5595
let plannedJobs = try driver. planBuild ( )
5595
- XCTAssertEqual ( plannedJobs. count, 3 )
5596
+ XCTAssertEqual ( plannedJobs. count, 4 )
5597
+
5598
+ // Emit-module should emit both module interface files
5596
5599
let emitJob = try plannedJobs. findJob ( . emitModule)
5597
- let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5598
- let mergeInterfaceOutputs = emitJob. outputs. filter { $0. type == . swiftInterface }
5599
- XCTAssertTrue ( mergeInterfaceOutputs. count == 1 ,
5600
- " Merge module job should only have one swiftinterface output " )
5601
- XCTAssertTrue ( verifyJob. inputs. count == 1 )
5602
- XCTAssertTrue ( verifyJob. inputs [ 0 ] == mergeInterfaceOutputs [ 0 ] )
5603
- XCTAssertTrue ( verifyJob. outputs. isEmpty)
5604
- XCTAssertTrue ( verifyJob. commandLine. contains ( . path( mergeInterfaceOutputs [ 0 ] . file) ) )
5600
+ let publicModuleInterface = emitJob. outputs. filter { $0. type == . swiftInterface }
5601
+ XCTAssertEqual ( publicModuleInterface. count, 1 )
5602
+ let privateModuleInterface = emitJob. outputs. filter { $0. type == . privateSwiftInterface }
5603
+ XCTAssertEqual ( privateModuleInterface. count, 1 )
5604
+
5605
+ // Each verify job should either check the public or the private module interface, not both.
5606
+ let verifyJobs = plannedJobs. filter { $0. kind == . verifyModuleInterface }
5607
+ XCTAssertEqual ( verifyJobs. count, 2 )
5608
+ for verifyJob in verifyJobs {
5609
+ let publicVerify = verifyJob. inputs. contains ( try XCTUnwrap ( publicModuleInterface. first) )
5610
+ let privateVerify = verifyJob. inputs. contains ( try XCTUnwrap ( privateModuleInterface. first) )
5611
+ XCTAssertNotEqual ( publicVerify, privateVerify)
5612
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5613
+ }
5605
5614
}
5606
5615
5607
5616
// No Evolution
@@ -5610,6 +5619,7 @@ final class SwiftDriverTests: XCTestCase {
5610
5619
" foo " , " -emit-module-interface " , " -verify-emitted-module-interface " ] , env: envVars)
5611
5620
let plannedJobs = try driver. planBuild ( )
5612
5621
XCTAssertEqual ( plannedJobs. count, 2 )
5622
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5613
5623
}
5614
5624
5615
5625
// Explicitly disabled
@@ -5620,6 +5630,7 @@ final class SwiftDriverTests: XCTestCase {
5620
5630
" -no-verify-emitted-module-interface " ] , env: envVars)
5621
5631
let plannedJobs = try driver. planBuild ( )
5622
5632
XCTAssertEqual ( plannedJobs. count, 2 )
5633
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5623
5634
let emitJob = try plannedJobs. findJob ( . emitModule)
5624
5635
XCTAssertTrue ( emitJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5625
5636
}
@@ -5632,16 +5643,7 @@ final class SwiftDriverTests: XCTestCase {
5632
5643
" -no-emit-module-separately " ] , env: envVars)
5633
5644
let plannedJobs = try driver. planBuild ( )
5634
5645
XCTAssertEqual ( plannedJobs. count, 2 )
5635
- }
5636
-
5637
- // Disabled when no "ENABLE_DEFAULT_INTERFACE_VERIFIER" found in the environment
5638
- do {
5639
- var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5640
- " foo " , " -emit-module-interface " ,
5641
- " -enable-library-evolution " ,
5642
- " -experimental-emit-module-separately " ] )
5643
- let plannedJobs = try driver. planBuild ( )
5644
- XCTAssertEqual ( plannedJobs. count, 2 )
5646
+ XCTAssertFalse ( plannedJobs. containsJob ( . verifyModuleInterface) )
5645
5647
}
5646
5648
5647
5649
// Emit-module separately
@@ -5660,6 +5662,7 @@ final class SwiftDriverTests: XCTestCase {
5660
5662
XCTAssertTrue ( verifyJob. inputs. count == 1 )
5661
5663
XCTAssertTrue ( verifyJob. inputs [ 0 ] == emitInterfaceOutput [ 0 ] )
5662
5664
XCTAssertTrue ( verifyJob. commandLine. contains ( . path( emitInterfaceOutput [ 0 ] . file) ) )
5665
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5663
5666
XCTAssertFalse ( emitJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5664
5667
XCTAssertFalse ( emitJob. commandLine. contains ( " -verify-emitted-module-interface " ) )
5665
5668
}
@@ -5682,6 +5685,7 @@ final class SwiftDriverTests: XCTestCase {
5682
5685
XCTAssertTrue ( verifyJob. inputs. count == 1 )
5683
5686
XCTAssertTrue ( verifyJob. inputs [ 0 ] == emitInterfaceOutput [ 0 ] )
5684
5687
XCTAssertTrue ( verifyJob. commandLine. contains ( . path( emitInterfaceOutput [ 0 ] . file) ) )
5688
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5685
5689
}
5686
5690
5687
5691
// Test the `-no-verify-emitted-module-interface` flag with whole-module
@@ -5706,21 +5710,63 @@ final class SwiftDriverTests: XCTestCase {
5706
5710
" -library-level " , " api " ] )
5707
5711
let plannedJobs = try driver. planBuild ( )
5708
5712
XCTAssertEqual ( plannedJobs. count, 2 )
5709
- XCTAssertTrue ( plannedJobs. containsJob ( . verifyModuleInterface) )
5713
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5714
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5710
5715
}
5711
5716
5712
- // Not enabled by default when the library-level is spi.
5717
+ // Enabled by default when the library-level is spi.
5713
5718
do {
5714
5719
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5715
5720
" foo " , " -emit-module-interface " ,
5716
5721
" -enable-library-evolution " ,
5717
5722
" -whole-module-optimization " ,
5718
5723
" -library-level " , " spi " ] )
5719
5724
let plannedJobs = try driver. planBuild ( )
5720
- XCTAssertEqual ( plannedJobs. count, 1 )
5721
- XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
5722
- let compileJob = try plannedJobs. findJob ( . compile)
5723
- XCTAssertFalse ( compileJob. commandLine. contains ( " -no-verify-emitted-module-interface " ) )
5725
+ XCTAssertEqual ( plannedJobs. count, 2 )
5726
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5727
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5728
+ }
5729
+
5730
+ // Errors downgraded to a warning when a module is blocklisted.
5731
+ try assertDriverDiagnostics ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5732
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5733
+ " -enable-library-evolution " ,
5734
+ " -whole-module-optimization " ,
5735
+ " -library-level " , " api " ] ) { driver, verify in
5736
+ let plannedJobs = try driver. planBuild ( )
5737
+ XCTAssertEqual ( plannedJobs. count, 2 )
5738
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5739
+ if driver. isFrontendArgSupported ( . downgradeTypecheckInterfaceError) {
5740
+ XCTAssertTrue ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5741
+ }
5742
+
5743
+ verify. expect ( . remark( " Verification of module interfaces for 'TestBlocklistedModule' set to warning only by blocklist " ) )
5744
+ }
5745
+
5746
+ // Don't downgrade to error blocklisted modules when the env var is set.
5747
+ do {
5748
+ envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5749
+ var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5750
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5751
+ " -enable-library-evolution " ,
5752
+ " -whole-module-optimization " ] , env: envVars)
5753
+ let plannedJobs = try driver. planBuild ( )
5754
+ XCTAssertEqual ( plannedJobs. count, 2 )
5755
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5756
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5757
+ }
5758
+
5759
+ // Don't downgrade to error blocklisted modules if the verify flag is set.
5760
+ do {
5761
+ var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " , " -module-name " ,
5762
+ " TestBlocklistedModule " , " -emit-module-interface " ,
5763
+ " -enable-library-evolution " ,
5764
+ " -whole-module-optimization " ,
5765
+ " -verify-emitted-module-interface " ] )
5766
+ let plannedJobs = try driver. planBuild ( )
5767
+ XCTAssertEqual ( plannedJobs. count, 2 )
5768
+ let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
5769
+ XCTAssertFalse ( verifyJob. commandLine. contains ( " -downgrade-typecheck-interface-error " ) )
5724
5770
}
5725
5771
5726
5772
// The flag -check-api-availability-only is not passed down to the verify job.
@@ -5752,9 +5798,6 @@ final class SwiftDriverTests: XCTestCase {
5752
5798
}
5753
5799
5754
5800
func testVerifyEmittedPackageInterface( ) throws {
5755
- var envVars = ProcessEnv . vars
5756
- envVars [ " ENABLE_DEFAULT_INTERFACE_VERIFIER " ] = " YES "
5757
-
5758
5801
// Evolution enabled
5759
5802
do {
5760
5803
var driver = try Driver ( args: [ " swiftc " , " foo.swift " , " -emit-module " ,
@@ -5763,11 +5806,9 @@ final class SwiftDriverTests: XCTestCase {
5763
5806
" -emit-module-interface " ,
5764
5807
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5765
5808
" -verify-emitted-module-interface " ,
5766
- " -enable-library-evolution " ] , env : envVars )
5809
+ " -enable-library-evolution " ] )
5767
5810
5768
5811
let plannedJobs = try driver. planBuild ( )
5769
- let x = plannedJobs. first? . commandLine. joinedUnresolvedArguments ?? " "
5770
- print ( x)
5771
5812
XCTAssertEqual ( plannedJobs. count, 4 )
5772
5813
let emitJob = try plannedJobs. findJob ( . emitModule)
5773
5814
let verifyJob = try plannedJobs. findJob ( . verifyModuleInterface)
@@ -5790,7 +5831,7 @@ final class SwiftDriverTests: XCTestCase {
5790
5831
" -emit-module-interface " ,
5791
5832
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5792
5833
" -enable-library-evolution " ,
5793
- " -no-verify-emitted-module-interface " ] , env : envVars )
5834
+ " -no-verify-emitted-module-interface " ] )
5794
5835
let plannedJobs = try driver. planBuild ( )
5795
5836
XCTAssertEqual ( plannedJobs. count, 2 )
5796
5837
}
@@ -5803,7 +5844,7 @@ final class SwiftDriverTests: XCTestCase {
5803
5844
" -emit-module-interface " ,
5804
5845
" -emit-package-module-interface-path " , " foo.package.swiftinterface " ,
5805
5846
" -enable-library-evolution " ,
5806
- " -experimental-emit-module-separately " ] , env : envVars )
5847
+ " -experimental-emit-module-separately " ] )
5807
5848
let plannedJobs = try driver. planBuild ( )
5808
5849
XCTAssertEqual ( plannedJobs. count, 4 )
5809
5850
let emitJob = try plannedJobs. findJob ( . emitModule)
0 commit comments