From: Richard Smith Date: Sat, 1 Dec 2012 01:02:45 +0000 (+0000) Subject: Remove restriction on combining ubsan with asan or tsan. This has worked for a while. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=056503786410c0e72b1389918719a37e9342817b;p=clang Remove restriction on combining ubsan with asan or tsan. This has worked for a while. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169066 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 9beba88b14..89e7d8f16c 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1466,14 +1466,12 @@ SanitizerArgs::SanitizerArgs(const Driver &D, const ArgList &Args) { } // Only one runtime library can be used at once. - // FIXME: Allow Ubsan to be combined with the other two. bool NeedsAsan = needsAsanRt(); bool NeedsTsan = needsTsanRt(); - bool NeedsUbsan = needsUbsanRt(); - if (NeedsAsan + NeedsTsan + NeedsUbsan > 1) + if (NeedsAsan && NeedsTsan) D.Diag(diag::err_drv_argument_not_allowed_with) - << lastArgumentForKind(D, Args, NeedsAsan ? NeedsAsanRt : NeedsTsanRt) - << lastArgumentForKind(D, Args, NeedsUbsan ? NeedsUbsanRt : NeedsTsanRt); + << lastArgumentForKind(D, Args, NeedsAsanRt) + << lastArgumentForKind(D, Args, NeedsTsanRt); // If -fsanitize contains extra features of ASan, it should also // explicitly contain -fsanitize=address. @@ -1545,6 +1543,7 @@ static void addUbsanRTLinux(const ToolChain &TC, const ArgList &Args, TC.getArchName() + ".a")); CmdArgs.push_back(Args.MakeArgString(LibUbsan)); CmdArgs.push_back("-lpthread"); + CmdArgs.push_back("-export-dynamic"); } } diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c index 1e2485b8d8..bceb129dae 100644 --- a/test/Driver/fsanitize.c +++ b/test/Driver/fsanitize.c @@ -26,11 +26,11 @@ // RUN: %clang -target x86_64-linux-gnu -fsanitize=init-order %s -c -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-ONLY-EXTRA-ASAN // CHECK-ONLY-EXTRA-ASAN: argument '-fsanitize=init-order' only allowed with '-fsanitize=address' -// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize=alignment -fsanitize=vptr -fno-sanitize=vptr %s -c -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-UBSAN-ASAN -// CHECK-UBSAN-ASAN: '-fsanitize=address' not allowed with '-fsanitize=alignment' +// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize=alignment -fsanitize=vptr -fno-sanitize=vptr %s -c -o /dev/null 2>&1 +// OK -// RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -c -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-VPTR-UBSAN-ASAN -// CHECK-VPTR-UBSAN-ASAN: '-fsanitize=address' not allowed with '-fsanitize=undefined' +// RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -c -o /dev/null 2>&1 +// OK // RUN: %clang -target x86_64-linux-gnu -fcatch-undefined-behavior -fthread-sanitizer -fno-thread-sanitizer -faddress-sanitizer -fno-address-sanitizer -fbounds-checking -c -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=CHECK-DEPRECATED // CHECK-DEPRECATED: argument '-fcatch-undefined-behavior' is deprecated, use '-fsanitize=undefined' instead