diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-06-14 21:33:40 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-06-14 21:33:40 +0000 |
commit | 5b49eb42c5071e21dc0004528dfa6f9babad5202 (patch) | |
tree | 4348569f3063ff84afd5c13e419c1dff90622271 /clang/lib | |
parent | f2f2a6395fad5bd49a573fdf2b20072735d496f7 (diff) | |
download | bcm5719-llvm-5b49eb42c5071e21dc0004528dfa6f9babad5202.tar.gz bcm5719-llvm-5b49eb42c5071e21dc0004528dfa6f9babad5202.zip |
[sanitizer] Allow sanitize coverage w/o sanitizers.
The reason is that this (a) seems to work just fine and (b) useful when building stuff with
sanitizer+coverage, but need to exclude the sanitizer for a particular source file.
llvm-svn: 272717
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/SanitizerArgs.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index d64ac53b69e..4d30a1bc95f 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -159,11 +159,10 @@ static SanitizerMask parseSanitizeTrapArgs(const Driver &D, } bool SanitizerArgs::needsUbsanRt() const { - return (Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) && - !Sanitizers.has(Address) && - !Sanitizers.has(Memory) && - !Sanitizers.has(Thread) && - !CfiCrossDso; + return ((Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) || + CoverageFeatures) && + !Sanitizers.has(Address) && !Sanitizers.has(Memory) && + !Sanitizers.has(Thread) && !CfiCrossDso; } bool SanitizerArgs::needsCfiRt() const { @@ -485,10 +484,10 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, continue; } CoverageFeatures |= parseCoverageFeatures(D, Arg); - // If there is trace-pc, allow it w/o any of the sanitizers. - // Otherwise, require that one of the supported sanitizers is present. - if ((CoverageFeatures & CoverageTracePC) || - (AllAddedKinds & SupportsCoverage)) { + + // Disable coverage and not claim the flags if there is at least one + // non-supporting sanitizer. + if (!(AllAddedKinds & ~setGroupBits(SupportsCoverage))) { Arg->claim(); } else { CoverageFeatures = 0; |