diff options
author | Fangrui Song <maskray@google.com> | 2019-07-10 00:30:02 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-07-10 00:30:02 +0000 |
commit | 9c147bd40bc93376df274e8a5d51c69a55199044 (patch) | |
tree | b875763aebbb91b82a8b8148359327b6194310c3 /clang/lib/Driver/SanitizerArgs.cpp | |
parent | d0ba79fe7bfe32f8e0ddf42de002716d937431c4 (diff) | |
download | bcm5719-llvm-9c147bd40bc93376df274e8a5d51c69a55199044.tar.gz bcm5719-llvm-9c147bd40bc93376df274e8a5d51c69a55199044.zip |
[Driver] Add float-divide-by-zero back to supported sanitizers after D63793/rC365272
D63793 removed float-divide-by-zero from the "undefined" set but it
failed to add it to getSupportedSanitizers(), thus the sanitizer is
rejected by the driver:
clang-9: error: unsupported option '-fsanitize=float-divide-by-zero' for target 'x86_64-unknown-linux-gnu'
Also, add SanitizerMask::FloatDivideByZero to a few other masks to make -fsanitize-trap, -fsanitize-recover, -fsanitize-minimal-runtime and -fsanitize-coverage work.
Reviewed By: rsmith, vitalybuka
Differential Revision: https://reviews.llvm.org/D64317
llvm-svn: 365587
Diffstat (limited to 'clang/lib/Driver/SanitizerArgs.cpp')
-rw-r--r-- | clang/lib/Driver/SanitizerArgs.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index 7127e9789a8..8d4b9fc85de 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -27,7 +27,7 @@ using namespace llvm::opt; static const SanitizerMask NeedsUbsanRt = SanitizerKind::Undefined | SanitizerKind::Integer | SanitizerKind::ImplicitConversion | SanitizerKind::Nullability | - SanitizerKind::CFI; + SanitizerKind::CFI | SanitizerKind::FloatDivideByZero; static const SanitizerMask NeedsUbsanCxxRt = SanitizerKind::Vptr | SanitizerKind::CFI; static const SanitizerMask NotAllowedWithTrap = SanitizerKind::Vptr; @@ -44,10 +44,11 @@ static const SanitizerMask SupportsCoverage = SanitizerKind::Undefined | SanitizerKind::Integer | SanitizerKind::ImplicitConversion | SanitizerKind::Nullability | SanitizerKind::DataFlow | SanitizerKind::Fuzzer | - SanitizerKind::FuzzerNoLink; + SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero; static const SanitizerMask RecoverableByDefault = SanitizerKind::Undefined | SanitizerKind::Integer | - SanitizerKind::ImplicitConversion | SanitizerKind::Nullability; + SanitizerKind::ImplicitConversion | SanitizerKind::Nullability | + SanitizerKind::FloatDivideByZero; static const SanitizerMask Unrecoverable = SanitizerKind::Unreachable | SanitizerKind::Return; static const SanitizerMask AlwaysRecoverable = @@ -59,7 +60,7 @@ static const SanitizerMask TrappingSupported = (SanitizerKind::Undefined & ~SanitizerKind::Vptr) | SanitizerKind::UnsignedIntegerOverflow | SanitizerKind::ImplicitConversion | SanitizerKind::Nullability | SanitizerKind::LocalBounds | - SanitizerKind::CFI; + SanitizerKind::CFI | SanitizerKind::FloatDivideByZero; static const SanitizerMask TrappingDefault = SanitizerKind::CFI; static const SanitizerMask CFIClasses = SanitizerKind::CFIVCall | SanitizerKind::CFINVCall | @@ -125,9 +126,10 @@ static void addDefaultBlacklists(const Driver &D, SanitizerMask Kinds, {"tsan_blacklist.txt", SanitizerKind::Thread}, {"dfsan_abilist.txt", SanitizerKind::DataFlow}, {"cfi_blacklist.txt", SanitizerKind::CFI}, - {"ubsan_blacklist.txt", SanitizerKind::Undefined | - SanitizerKind::Integer | - SanitizerKind::Nullability}}; + {"ubsan_blacklist.txt", + SanitizerKind::Undefined | SanitizerKind::Integer | + SanitizerKind::Nullability | + SanitizerKind::FloatDivideByZero}}; for (auto BL : Blacklists) { if (!(Kinds & BL.Mask)) |