diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-01-28 07:20:44 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-01-28 07:20:44 +0000 |
commit | 2cbcf1a32015e943acc08cc01689f99b972da555 (patch) | |
tree | 471f75c3fc969bf288e9ad234b1ab8a411f20690 /clang/lib/Driver/Tools.cpp | |
parent | 71d99ffe4add0431028e885dda8549a05ab36775 (diff) | |
download | bcm5719-llvm-2cbcf1a32015e943acc08cc01689f99b972da555.tar.gz bcm5719-llvm-2cbcf1a32015e943acc08cc01689f99b972da555.zip |
Print warning instead of error if optional ASan features are enabled w/o specifying -fsanitize=address
llvm-svn: 173670
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 69340e62aed..e4be6935eab 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1447,7 +1447,8 @@ static bool UseRelaxAll(Compilation &C, const ArgList &Args) { SanitizerArgs::SanitizerArgs(const Driver &D, const ArgList &Args) : Kind(0), BlacklistFile(""), MsanTrackOrigins(false), AsanZeroBaseShadow(false) { - + unsigned AllKinds = 0; // All kinds of sanitizers that were turned on + // at least once (possibly, disabled further). for (ArgList::const_iterator I = Args.begin(), E = Args.end(); I != E; ++I) { unsigned Add, Remove; if (!parse(D, Args, *I, Add, Remove, true)) @@ -1455,6 +1456,7 @@ SanitizerArgs::SanitizerArgs(const Driver &D, const ArgList &Args) (*I)->claim(); Kind |= Add; Kind &= ~Remove; + AllKinds |= Add; } // Only one runtime library can be used at once. @@ -1475,11 +1477,12 @@ SanitizerArgs::SanitizerArgs(const Driver &D, const ArgList &Args) << lastArgumentForKind(D, Args, NeedsMsanRt); // If -fsanitize contains extra features of ASan, it should also - // explicitly contain -fsanitize=address. - if (NeedsAsan && ((Kind & Address) == 0)) - D.Diag(diag::err_drv_argument_only_allowed_with) - << lastArgumentForKind(D, Args, NeedsAsanRt) - << "-fsanitize=address"; + // explicitly contain -fsanitize=address (probably, turned off later in the + // command line). + if ((Kind & AddressFull) != 0 && (AllKinds & Address) == 0) + D.Diag(diag::warn_drv_unused_sanitizer) + << lastArgumentForKind(D, Args, AddressFull) + << "-fsanitize=address"; // Parse -f(no-)sanitize-blacklist options. if (Arg *BLArg = Args.getLastArg(options::OPT_fsanitize_blacklist, |