"malformed sanitizer coverage ignorelist: '%0'">;
def err_drv_malformed_sanitizer_metadata_ignorelist : Error<
"malformed sanitizer metadata ignorelist: '%0'">;
-def err_drv_unsupported_static_sanitizer_darwin : Error<
- "static %0 runtime is not supported on darwin">;
+def err_drv_unsupported_static_ubsan_darwin : Error<
+ "static UndefinedBehaviorSanitizer runtime is not supported on darwin">;
def err_drv_duplicate_config : Error<
"no more than one option '--config' is allowed">;
def err_drv_cannot_open_config_file : Error<
def shared_libsan : Flag<["-"], "shared-libsan">,
HelpText<"Dynamically link the sanitizer runtime">;
def static_libsan : Flag<["-"], "static-libsan">,
- HelpText<"Statically link the sanitizer runtime (Not supported for ASan, TSan or UBSan on darwin)">;
+ HelpText<"Statically link the sanitizer runtime">;
def : Flag<["-"], "shared-libasan">, Alias<shared_libsan>;
def fasm : Flag<["-"], "fasm">, Group<f_Group>;
const SanitizerArgs &Sanitize = getSanitizerArgs(Args);
- if (!Sanitize.needsSharedRt()) {
- const char *sanitizer = nullptr;
- if (Sanitize.needsUbsanRt()) {
- sanitizer = "UndefinedBehaviorSanitizer";
- } else if (Sanitize.needsAsanRt()) {
- sanitizer = "AddressSanitizer";
- } else if (Sanitize.needsTsanRt()) {
- sanitizer = "ThreadSanitizer";
- }
- if (sanitizer) {
- getDriver().Diag(diag::err_drv_unsupported_static_sanitizer_darwin)
- << sanitizer;
- return;
- }
+ if (!Sanitize.needsSharedRt() && Sanitize.needsUbsanRt()) {
+ getDriver().Diag(diag::err_drv_unsupported_static_ubsan_darwin);
+ return;
}
if (Sanitize.linkRuntimes()) {
- if (Sanitize.needsAsanRt()) {
- assert(Sanitize.needsSharedRt() &&
- "Static sanitizer runtimes not supported");
+ if (Sanitize.needsAsanRt())
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
- }
if (Sanitize.needsLsanRt())
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
if (Sanitize.needsUbsanRt()) {
- assert(Sanitize.needsSharedRt() &&
- "Static sanitizer runtimes not supported");
- AddLinkSanitizerLibArgs(
- Args, CmdArgs,
- Sanitize.requiresMinimalRuntime() ? "ubsan_minimal" : "ubsan");
+ assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
+ AddLinkSanitizerLibArgs(Args, CmdArgs,
+ Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
+ : "ubsan");
}
- if (Sanitize.needsTsanRt()) {
- assert(Sanitize.needsSharedRt() &&
- "Static sanitizer runtimes not supported");
+ if (Sanitize.needsTsanRt())
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
- }
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
AddLinkSanitizerLibArgs(Args, CmdArgs, "fuzzer", /*shared=*/false);
// RUN: | FileCheck --check-prefix=CHECK-UBSAN-STATIC-DARWIN %s
// CHECK-UBSAN-STATIC-DARWIN: {{.*}}error: static UndefinedBehaviorSanitizer runtime is not supported on darwin
-// RUN: %clang -fsanitize=address -### %s 2>&1 \
-// RUN: --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
-// RUN: --sysroot=%S/Inputs/basic_linux_tree \
-// RUN: | FileCheck --check-prefix=CHECK-ASAN-STATIC-DARWIN %s
-// CHECK-ASAN-STATIC-DARWIN: {{.*}}error: static AddressSanitizer runtime is not supported on darwin
-
-// RUN: %clang -fsanitize=thread -### %s 2>&1 \
-// RUN: --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
-// RUN: --sysroot=%S/Inputs/basic_linux_tree \
-// RUN: | FileCheck --check-prefix=CHECK-TSAN-STATIC-DARWIN %s
-// CHECK-TSAN-STATIC-DARWIN: {{.*}}error: static ThreadSanitizer runtime is not supported on darwin
-
// RUN: %clang -fsanitize=address,undefined -### %s 2>&1 \
// RUN: --target=i386-unknown-linux -fuse-ld=ld \
// RUN: -resource-dir=%S/Inputs/resource_dir \