@@ -2708,56 +2708,39 @@ final class SwiftDriverTests: XCTestCase {
27082708
27092709 func testSanitizerArgs( ) throws {
27102710 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 "
27142712 ]
2715- // FIXME: This doesn't work on Linux.
2716- #if os(macOS)
2713+
27172714 do {
27182715 // address sanitizer
27192716 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 ( )
27272718
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 " ) )
27312722 }
27322723
27332724 do {
27342725 // address sanitizer on a dylib
27352726 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 ( )
27432728
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 " ) )
27472732 }
27482733
27492734 do {
27502735 // *no* address sanitizer on a static lib
27512736 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 ( )
27552738
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 " ) ) )
27592741 }
27602742
2743+ #if !os(Windows)
27612744 do {
27622745 // thread sanitizer
27632746 var driver = try Driver ( args: commonArgs + [ " -sanitize=thread " ] )
@@ -2773,21 +2756,16 @@ final class SwiftDriverTests: XCTestCase {
27732756 let linkCmd = linkJob. commandLine
27742757 XCTAssertTrue ( linkCmd. contains ( . flag( " -fsanitize=thread " ) ) )
27752758 }
2759+ #endif
27762760
27772761 do {
27782762 // undefined behavior sanitizer
27792763 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 ( )
27872765
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 " ) )
27912769 }
27922770
27932771 // FIXME: This test will fail when run on macOS, because the driver uses
@@ -2838,7 +2816,6 @@ final class SwiftDriverTests: XCTestCase {
28382816 XCTAssertTrue ( linkCmd. contains ( . flag( " -fsanitize=scudo " ) ) )
28392817 }
28402818 #endif
2841- #endif
28422819
28432820 // FIXME: This test will fail when not run on Android, because the driver uses
28442821 // the existence of the runtime support libraries to determine if
@@ -7221,7 +7198,7 @@ final class SwiftDriverTests: XCTestCase {
72217198 }
72227199
72237200 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 " ]
72257202 try targets. forEach {
72267203 var driver = try Driver ( args: [ " swiftc " , " -emit-module " , " -target " , $0, " foo.swift " ] )
72277204 _ = try driver. planBuild ( )
0 commit comments