From: Vedant Kumar Date: Thu, 21 Dec 2017 00:10:24 +0000 (+0000) Subject: [Driver] Ensure no overlap between trapping & recoverable sanitizers. NFC. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c061b7b668221ce0e5ff6d40cc7bba7374ce83c;p=clang [Driver] Ensure no overlap between trapping & recoverable sanitizers. NFC. This is NFC because in EmitCheck(), -fsanitize-trap=X overrides -fsanitize-recover=X. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@321230 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/SanitizerArgs.cpp b/lib/Driver/SanitizerArgs.cpp index f617d8b455..6ba8892f35 100644 --- a/lib/Driver/SanitizerArgs.cpp +++ b/lib/Driver/SanitizerArgs.cpp @@ -440,6 +440,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, RecoverableKinds &= ~Unrecoverable; TrappingKinds &= Kinds; + RecoverableKinds &= ~TrappingKinds; // Setup blacklist files. // Add default blacklist from resource directory. @@ -683,6 +684,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, Sanitizers.Mask |= Kinds; RecoverableSanitizers.Mask |= RecoverableKinds; TrapSanitizers.Mask |= TrappingKinds; + assert(!(RecoverableKinds & TrappingKinds) && + "Overlap between recoverable and trapping sanitizers"); } static std::string toString(const clang::SanitizerSet &Sanitizers) { diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c index eb8eab574c..7870f724b6 100644 --- a/test/Driver/fsanitize.c +++ b/test/Driver/fsanitize.c @@ -3,6 +3,7 @@ // RUN: %clang -target x86_64-linux-gnu -fsanitize=undefined -fsanitize-undefined-trap-on-error %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-UNDEFINED-TRAP // RUN: %clang -target x86_64-linux-gnu -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-UNDEFINED-TRAP // RUN: %clang -target x86_64-linux-gnu -fsanitize-undefined-trap-on-error -fsanitize=undefined-trap %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-UNDEFINED-TRAP +// CHECK-UNDEFINED-TRAP-NOT: -fsanitize-recover // CHECK-UNDEFINED-TRAP: "-fsanitize={{((signed-integer-overflow|integer-divide-by-zero|float-divide-by-zero|shift-base|shift-exponent|unreachable|return|vla-bound|alignment|null|pointer-overflow|float-cast-overflow|array-bounds|enum|bool|builtin|returns-nonnull-attribute|nonnull-attribute|function),?){19}"}} // CHECK-UNDEFINED-TRAP: "-fsanitize-trap=alignment,array-bounds,bool,builtin,enum,float-cast-overflow,float-divide-by-zero,function,integer-divide-by-zero,nonnull-attribute,null,pointer-overflow,return,returns-nonnull-attribute,shift-base,shift-exponent,signed-integer-overflow,unreachable,vla-bound" // CHECK-UNDEFINED-TRAP2: "-fsanitize-trap=alignment,array-bounds,bool,builtin,enum,float-cast-overflow,float-divide-by-zero,function,integer-divide-by-zero,nonnull-attribute,null,pointer-overflow,return,returns-nonnull-attribute,shift-base,shift-exponent,unreachable,vla-bound"