@@ -2708,56 +2708,39 @@ final class SwiftDriverTests: XCTestCase {
2708
2708
2709
2709
func testSanitizerArgs( ) throws {
2710
2710
let commonArgs = [
2711
- " swiftc " , " foo.swift " , " bar.swift " ,
2712
- " -emit-executable " , " -target " , " x86_64-apple-macosx10.9 " ,
2713
- " -module-name " , " Test "
2711
+ " swiftc " , " foo.swift " , " bar.swift " , " -emit-executable " , " -module-name " , " Test " , " -use-ld=lld "
2714
2712
]
2715
- // FIXME: This doesn't work on Linux.
2716
- #if os(macOS)
2713
+
2717
2714
do {
2718
2715
// address sanitizer
2719
2716
var driver = try Driver ( args: commonArgs + [ " -sanitize=address " ] )
2720
- let plannedJobs = try driver. planBuild ( )
2721
-
2722
- XCTAssertEqual ( plannedJobs. count, 3 )
2723
-
2724
- let compileJob = plannedJobs [ 0 ]
2725
- let compileCmd = compileJob. commandLine
2726
- XCTAssertTrue ( compileCmd. contains ( . flag( " -sanitize=address " ) ) )
2717
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
2727
2718
2728
- let linkJob = plannedJobs [ 2 ]
2729
- let linkCmd = linkJob . commandLine
2730
- XCTAssertTrue ( linkCmd . contains ( . flag( " -fsanitize=address " ) ) )
2719
+ XCTAssertEqual ( jobs . count , 3 )
2720
+ XCTAssertJobInvocationMatches ( jobs [ 0 ] , . flag ( " -sanitize=address " ) )
2721
+ XCTAssertJobInvocationMatches ( jobs [ 2 ] , . flag( " -fsanitize=address " ) )
2731
2722
}
2732
2723
2733
2724
do {
2734
2725
// address sanitizer on a dylib
2735
2726
var driver = try Driver ( args: commonArgs + [ " -sanitize=address " , " -emit-library " ] )
2736
- let plannedJobs = try driver. planBuild ( )
2737
-
2738
- XCTAssertEqual ( plannedJobs. count, 3 )
2739
-
2740
- let compileJob = plannedJobs [ 0 ]
2741
- let compileCmd = compileJob. commandLine
2742
- XCTAssertTrue ( compileCmd. contains ( . flag( " -sanitize=address " ) ) )
2727
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
2743
2728
2744
- let linkJob = plannedJobs [ 2 ]
2745
- let linkCmd = linkJob . commandLine
2746
- XCTAssertTrue ( linkCmd . contains ( . flag( " -fsanitize=address " ) ) )
2729
+ XCTAssertEqual ( jobs . count , 3 )
2730
+ XCTAssertJobInvocationMatches ( jobs [ 0 ] , . flag ( " -sanitize=address " ) )
2731
+ XCTAssertJobInvocationMatches ( jobs [ 2 ] , . flag( " -fsanitize=address " ) )
2747
2732
}
2748
2733
2749
2734
do {
2750
2735
// *no* address sanitizer on a static lib
2751
2736
var driver = try Driver ( args: commonArgs + [ " -sanitize=address " , " -emit-library " , " -static " ] )
2752
- let plannedJobs = try driver. planBuild ( )
2753
-
2754
- XCTAssertEqual ( plannedJobs. count, 3 )
2737
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
2755
2738
2756
- let linkJob = plannedJobs [ 2 ]
2757
- let linkCmd = linkJob. commandLine
2758
- XCTAssertFalse ( linkCmd. contains ( . flag( " -fsanitize=address " ) ) )
2739
+ XCTAssertEqual ( jobs. count, 3 )
2740
+ XCTAssertFalse ( jobs [ 2 ] . commandLine. contains ( . flag( " -fsanitize=address " ) ) )
2759
2741
}
2760
2742
2743
+ #if !os(Windows)
2761
2744
do {
2762
2745
// thread sanitizer
2763
2746
var driver = try Driver ( args: commonArgs + [ " -sanitize=thread " ] )
@@ -2773,21 +2756,16 @@ final class SwiftDriverTests: XCTestCase {
2773
2756
let linkCmd = linkJob. commandLine
2774
2757
XCTAssertTrue ( linkCmd. contains ( . flag( " -fsanitize=thread " ) ) )
2775
2758
}
2759
+ #endif
2776
2760
2777
2761
do {
2778
2762
// undefined behavior sanitizer
2779
2763
var driver = try Driver ( args: commonArgs + [ " -sanitize=undefined " ] )
2780
- let plannedJobs = try driver. planBuild ( )
2781
-
2782
- XCTAssertEqual ( plannedJobs. count, 3 )
2783
-
2784
- let compileJob = plannedJobs [ 0 ]
2785
- let compileCmd = compileJob. commandLine
2786
- XCTAssertTrue ( compileCmd. contains ( . flag( " -sanitize=undefined " ) ) )
2764
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
2787
2765
2788
- let linkJob = plannedJobs [ 2 ]
2789
- let linkCmd = linkJob . commandLine
2790
- XCTAssertTrue ( linkCmd . contains ( . flag( " -fsanitize=undefined " ) ) )
2766
+ XCTAssertEqual ( jobs . count , 3 )
2767
+ XCTAssertJobInvocationMatches ( jobs [ 0 ] , . flag ( " -sanitize=undefined " ) )
2768
+ XCTAssertJobInvocationMatches ( jobs [ 2 ] , . flag( " -fsanitize=undefined " ) )
2791
2769
}
2792
2770
2793
2771
// FIXME: This test will fail when run on macOS, because the driver uses
@@ -2838,7 +2816,6 @@ final class SwiftDriverTests: XCTestCase {
2838
2816
XCTAssertTrue ( linkCmd. contains ( . flag( " -fsanitize=scudo " ) ) )
2839
2817
}
2840
2818
#endif
2841
- #endif
2842
2819
2843
2820
// FIXME: This test will fail when not run on Android, because the driver uses
2844
2821
// the existence of the runtime support libraries to determine if
@@ -7221,7 +7198,7 @@ final class SwiftDriverTests: XCTestCase {
7221
7198
}
7222
7199
7223
7200
func testSanitizerArgsForTargets( ) throws {
7224
- let targets = [ " x86_64-unknown-freebsd " , " x86_64-unknown-linux " , " x86_64-apple-macosx10.9 " ]
7201
+ let targets = [ " x86_64-unknown-freebsd " , " x86_64-unknown-linux " , " x86_64-apple-macosx10.9 " , " x86_64-unknown-windows-msvc " ]
7225
7202
try targets. forEach {
7226
7203
var driver = try Driver ( args: [ " swiftc " , " -emit-module " , " -target " , $0, " foo.swift " ] )
7227
7204
_ = try driver. planBuild ( )
0 commit comments