Skip to content

Commit 4535b64

Browse files
committed
Revert "SwiftDriver: enable -sanitize= on Windows selectively"
This reverts commit a9bf9bb.
1 parent b38ee42 commit 4535b64

File tree

4 files changed

+45
-36
lines changed

4 files changed

+45
-36
lines changed

Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,8 @@ extension Toolchain {
3232
if platform == "android" {
3333
platform = "linux"
3434
}
35-
36-
// NOTE(compnerd) Windows uses the per-target runtime directory for the
37-
// Windows runtimes. This should also be done for the other platforms, but
38-
// is not critical. This is done to allow for the Windows runtimes to be
39-
// co-located for all the currently supported architectures: x86, x64, arm64.
40-
let bIsWindows = targetInfo.target.triple.isWindows
4135
return VirtualPath.lookup(targetInfo.runtimeResourcePath.path)
42-
.appending(components: "clang", "lib", bIsWindows ? targetInfo.target.triple.triple : platform)
36+
.appending(components: "clang", "lib", platform)
4337
}
4438

4539
func runtimeLibraryPaths(

Sources/SwiftDriver/Jobs/WindowsToolchain+LinkerSupport.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,7 @@ extension WindowsToolchain {
223223
commandLine.appendFlag(optArg)
224224
}
225225

226-
if !sanitizers.isEmpty {
227-
let sanitize = sanitizers.map(\.rawValue).sorted().joined(separator: ",")
228-
commandLine.appendFlag("-fsanitize=\(sanitize)")
229-
}
226+
// FIXME(compnerd) render asan/ubsan runtime link for executables
230227

231228
if parsedOptions.contains(.profileGenerate) {
232229
assert(bForceLLD,

Sources/SwiftDriver/Toolchains/WindowsToolchain.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,6 @@ extension WindowsToolchain.ToolchainValidationError {
130130
public func runtimeLibraryName(for sanitizer: Sanitizer, targetTriple: Triple,
131131
isShared: Bool) throws -> String {
132132
// TODO(compnerd) handle shared linking
133-
134-
// FIXME(compnerd) when should `clang_rt.ubsan_standalone_cxx` be used?
135-
if sanitizer == .undefinedBehavior {
136-
return "clang_rt.ubsan_standalone.lib"
137-
}
138133
return "clang_rt.\(sanitizer.libraryName).lib"
139134
}
140135

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2708,39 +2708,56 @@ final class SwiftDriverTests: XCTestCase {
27082708

27092709
func testSanitizerArgs() throws {
27102710
let commonArgs = [
2711-
"swiftc", "foo.swift", "bar.swift", "-emit-executable", "-module-name", "Test", "-use-ld=lld"
2711+
"swiftc", "foo.swift", "bar.swift",
2712+
"-emit-executable", "-target", "x86_64-apple-macosx10.9",
2713+
"-module-name", "Test"
27122714
]
2713-
2715+
// FIXME: This doesn't work on Linux.
2716+
#if os(macOS)
27142717
do {
27152718
// address sanitizer
27162719
var driver = try Driver(args: commonArgs + ["-sanitize=address"])
2717-
let jobs = try driver.planBuild().removingAutolinkExtractJobs()
2720+
let plannedJobs = try driver.planBuild()
27182721

2719-
XCTAssertEqual(jobs.count, 3)
2720-
XCTAssertJobInvocationMatches(jobs[0], .flag("-sanitize=address"))
2721-
XCTAssertJobInvocationMatches(jobs[2], .flag("-fsanitize=address"))
2722+
XCTAssertEqual(plannedJobs.count, 3)
2723+
2724+
let compileJob = plannedJobs[0]
2725+
let compileCmd = compileJob.commandLine
2726+
XCTAssertTrue(compileCmd.contains(.flag("-sanitize=address")))
2727+
2728+
let linkJob = plannedJobs[2]
2729+
let linkCmd = linkJob.commandLine
2730+
XCTAssertTrue(linkCmd.contains(.flag("-fsanitize=address")))
27222731
}
27232732

27242733
do {
27252734
// address sanitizer on a dylib
27262735
var driver = try Driver(args: commonArgs + ["-sanitize=address", "-emit-library"])
2727-
let jobs = try driver.planBuild().removingAutolinkExtractJobs()
2736+
let plannedJobs = try driver.planBuild()
27282737

2729-
XCTAssertEqual(jobs.count, 3)
2730-
XCTAssertJobInvocationMatches(jobs[0], .flag("-sanitize=address"))
2731-
XCTAssertJobInvocationMatches(jobs[2], .flag("-fsanitize=address"))
2738+
XCTAssertEqual(plannedJobs.count, 3)
2739+
2740+
let compileJob = plannedJobs[0]
2741+
let compileCmd = compileJob.commandLine
2742+
XCTAssertTrue(compileCmd.contains(.flag("-sanitize=address")))
2743+
2744+
let linkJob = plannedJobs[2]
2745+
let linkCmd = linkJob.commandLine
2746+
XCTAssertTrue(linkCmd.contains(.flag("-fsanitize=address")))
27322747
}
27332748

27342749
do {
27352750
// *no* address sanitizer on a static lib
27362751
var driver = try Driver(args: commonArgs + ["-sanitize=address", "-emit-library", "-static"])
2737-
let jobs = try driver.planBuild().removingAutolinkExtractJobs()
2752+
let plannedJobs = try driver.planBuild()
27382753

2739-
XCTAssertEqual(jobs.count, 3)
2740-
XCTAssertFalse(jobs[2].commandLine.contains(.flag("-fsanitize=address")))
2754+
XCTAssertEqual(plannedJobs.count, 3)
2755+
2756+
let linkJob = plannedJobs[2]
2757+
let linkCmd = linkJob.commandLine
2758+
XCTAssertFalse(linkCmd.contains(.flag("-fsanitize=address")))
27412759
}
27422760

2743-
#if !os(Windows)
27442761
do {
27452762
// thread sanitizer
27462763
var driver = try Driver(args: commonArgs + ["-sanitize=thread"])
@@ -2756,16 +2773,21 @@ final class SwiftDriverTests: XCTestCase {
27562773
let linkCmd = linkJob.commandLine
27572774
XCTAssertTrue(linkCmd.contains(.flag("-fsanitize=thread")))
27582775
}
2759-
#endif
27602776

27612777
do {
27622778
// undefined behavior sanitizer
27632779
var driver = try Driver(args: commonArgs + ["-sanitize=undefined"])
2764-
let jobs = try driver.planBuild().removingAutolinkExtractJobs()
2780+
let plannedJobs = try driver.planBuild()
27652781

2766-
XCTAssertEqual(jobs.count, 3)
2767-
XCTAssertJobInvocationMatches(jobs[0], .flag("-sanitize=undefined"))
2768-
XCTAssertJobInvocationMatches(jobs[2], .flag("-fsanitize=undefined"))
2782+
XCTAssertEqual(plannedJobs.count, 3)
2783+
2784+
let compileJob = plannedJobs[0]
2785+
let compileCmd = compileJob.commandLine
2786+
XCTAssertTrue(compileCmd.contains(.flag("-sanitize=undefined")))
2787+
2788+
let linkJob = plannedJobs[2]
2789+
let linkCmd = linkJob.commandLine
2790+
XCTAssertTrue(linkCmd.contains(.flag("-fsanitize=undefined")))
27692791
}
27702792

27712793
// FIXME: This test will fail when run on macOS, because the driver uses
@@ -2816,6 +2838,7 @@ final class SwiftDriverTests: XCTestCase {
28162838
XCTAssertTrue(linkCmd.contains(.flag("-fsanitize=scudo")))
28172839
}
28182840
#endif
2841+
#endif
28192842

28202843
// FIXME: This test will fail when not run on Android, because the driver uses
28212844
// the existence of the runtime support libraries to determine if
@@ -7198,7 +7221,7 @@ final class SwiftDriverTests: XCTestCase {
71987221
}
71997222

72007223
func testSanitizerArgsForTargets() throws {
7201-
let targets = ["x86_64-unknown-freebsd", "x86_64-unknown-linux", "x86_64-apple-macosx10.9", "x86_64-unknown-windows-msvc"]
7224+
let targets = ["x86_64-unknown-freebsd", "x86_64-unknown-linux", "x86_64-apple-macosx10.9"]
72027225
try targets.forEach {
72037226
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", $0, "foo.swift"])
72047227
_ = try driver.planBuild()

0 commit comments

Comments
 (0)