[compiler-rt] r337068 - [UBSan] Followup for silence_unsigned_overflow flag to handle negate overflows.

Max Moroz via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 13 15:49:06 PDT 2018


Author: dor1s
Date: Fri Jul 13 15:49:06 2018
New Revision: 337068

URL: http://llvm.org/viewvc/llvm-project?rev=337068&view=rev
Log:
[UBSan] Followup for silence_unsigned_overflow flag to handle negate overflows.

Summary:
That flag has been introduced in https://reviews.llvm.org/D48660 for
suppressing UIO error messages in an efficient way. The main motivation is to
be able to use UIO checks in builds used for fuzzing as it might provide an
interesting signal to a fuzzing engine such as libFuzzer.

See https://github.com/google/oss-fuzz/issues/910 for more information.

Reviewers: morehouse, kcc

Reviewed By: morehouse

Subscribers: kubamracek, delcypher, #sanitizers, llvm-commits

Differential Revision: https://reviews.llvm.org/D49324

Modified:
    compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
    compiler-rt/trunk/test/ubsan/TestCases/Integer/negate-overflow.cpp

Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc?rev=337068&r1=337067&r2=337068&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc (original)
+++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc Fri Jul 13 15:49:06 2018
@@ -156,6 +156,9 @@ static void handleNegateOverflowImpl(Ove
   if (ignoreReport(Loc, Opts, ET))
     return;
 
+  if (!IsSigned && flags()->silence_unsigned_overflow)
+    return;
+
   ScopedReport R(Opts, Loc, ET);
 
   if (IsSigned)

Modified: compiler-rt/trunk/test/ubsan/TestCases/Integer/negate-overflow.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/Integer/negate-overflow.cpp?rev=337068&r1=337067&r2=337068&view=diff
==============================================================================
--- compiler-rt/trunk/test/ubsan/TestCases/Integer/negate-overflow.cpp (original)
+++ compiler-rt/trunk/test/ubsan/TestCases/Integer/negate-overflow.cpp Fri Jul 13 15:49:06 2018
@@ -1,10 +1,12 @@
 // RUN: %clangxx -fsanitize=signed-integer-overflow %s -o %t1 && %run %t1 2>&1 | FileCheck %s --check-prefix=CHECKS
 // RUN: %clangxx -fsanitize=unsigned-integer-overflow %s -o %t2 && %run %t2 2>&1 | FileCheck %s --check-prefix=CHECKU
+// RUN: %clangxx -fsanitize=unsigned-integer-overflow %s -o %t2 && %env_ubsan_opts=silence_unsigned_overflow=1 %run %t2 2>&1 | FileCheck %s --check-prefix=CHECKU-SILENT --allow-empty
 
 int main() {
   // CHECKS-NOT: runtime error
-  // CHECKU: negate-overflow.cpp:[[@LINE+2]]:3: runtime error: negation of 2147483648 cannot be represented in type 'unsigned int'
+  // CHECKU: negate-overflow.cpp:[[@LINE+3]]:3: runtime error: negation of 2147483648 cannot be represented in type 'unsigned int'
   // CHECKU-NOT: cast to an unsigned
+  // CHECKU-SILENT-NOT: runtime error
   -unsigned(-0x7fffffff - 1); // ok
   // CHECKS: negate-overflow.cpp:[[@LINE+2]]:3: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
   // CHECKU-NOT: runtime error




More information about the llvm-commits mailing list