Skip to content

Commit 62a62b9

Browse files
committed
SwiftBuild Integration: Enable some sanitizers
Update the SwiftPM's SwiftBuild integration to support enabling `address`, `thread` and `undefined` sanitizers while erroring out on the `scudo` and `fuzzer`. Depends on: swiftlang/swift-build#926
1 parent a5a83d1 commit 62a62b9

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

Sources/SwiftBuildSupport/SwiftBuildSystem.swift

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,20 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
885885
settings["SWIFT_EXEC"] = buildParameters.toolchain.swiftCompilerPath.pathString
886886
}
887887

888+
for sanitizer in buildParameters.sanitizers.sanitizers {
889+
self.observabilityScope.emit(debug:"Enabling \(sanitizer) sanitizer")
890+
switch sanitizer {
891+
case .address:
892+
settings["ENABLE_ADDRESS_SANITIZER"] = "YES"
893+
case .thread:
894+
settings["ENABLE_THREAD_SANITIZER"] = "YES"
895+
case .undefined:
896+
settings["ENABLE_UNDEFINED_BEHAVIOR_SANITIZER"] = "YES"
897+
case .fuzzer, .scudo:
898+
throw StringError("\(sanitizer) is not currently supported with this build system.")
899+
}
900+
}
901+
888902
// FIXME: workaround for old Xcode installations such as what is in CI
889903
settings["LM_SKIP_METADATA_EXTRACTION"] = "YES"
890904
if let symbolGraphOptions {
@@ -1223,13 +1237,13 @@ fileprivate extension SwiftBuild.SwiftBuildMessage.DiagnosticInfo.Location {
12231237
case .none:
12241238
return path
12251239
}
1226-
1240+
12271241
case .buildSettings(let names):
12281242
return names.joined(separator: ", ")
1229-
1243+
12301244
case .buildFiles(let buildFiles, let targetGUID):
12311245
return "\(targetGUID): " + buildFiles.map { String(describing: $0) }.joined(separator: ", ")
1232-
1246+
12331247
case .unknown:
12341248
return nil
12351249
}

0 commit comments

Comments
 (0)