[llvm-commits] [compiler-rt] r171273 - in /compiler-rt/trunk/lib/ubsan: lit_tests/Integer/negate-overflow.cpp ubsan_handlers.cc

Will Dietz wdietz2 at illinois.edu
Sun Dec 30 18:20:56 PST 2012


Author: wdietz2
Date: Sun Dec 30 20:20:55 2012
New Revision: 171273

URL: http://llvm.org/viewvc/llvm-project?rev=171273&view=rev
Log:
[ubsan] Don't suggest casting to unsigned for unsigned unary minus overflow.

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

Modified: compiler-rt/trunk/lib/ubsan/lit_tests/Integer/negate-overflow.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/lit_tests/Integer/negate-overflow.cpp?rev=171273&r1=171272&r2=171273&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/lit_tests/Integer/negate-overflow.cpp (original)
+++ compiler-rt/trunk/lib/ubsan/lit_tests/Integer/negate-overflow.cpp Sun Dec 30 20:20:55 2012
@@ -1,7 +1,12 @@
-// RUN: %clang -fsanitize=signed-integer-overflow %s -o %t && %t 2>&1 | FileCheck %s
+// RUN: %clang -fsanitize=signed-integer-overflow %s -o %t && %t 2>&1 | FileCheck %s --check-prefix=CHECKS
+// RUN: %clang -fsanitize=unsigned-integer-overflow %s -o %t && %t 2>&1 | FileCheck %s --check-prefix=CHECKU
 
 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-NOT: cast to an unsigned
   -unsigned(-0x7fffffff - 1); // ok
-  // CHECK: negate-overflow.cpp:6:10: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
+  // CHECKS: negate-overflow.cpp:[[@LINE+2]]:10: 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
   return -(-0x7fffffff - 1);
 }

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=171273&r1=171272&r2=171273&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc (original)
+++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc Sun Dec 30 20:20:55 2012
@@ -103,10 +103,15 @@
 
 void __ubsan::__ubsan_handle_negate_overflow(OverflowData *Data,
                                              ValueHandle OldVal) {
-  Diag(Data->Loc, DL_Error,
-       "negation of %0 cannot be represented in type %1; "
-       "cast to an unsigned type to negate this value to itself")
-    << Value(Data->Type, OldVal) << Data->Type;
+  if (Data->Type.isSignedIntegerTy())
+    Diag(Loc, DL_Error,
+         "negation of %0 cannot be represented in type %1; "
+         "cast to an unsigned type to negate this value to itself")
+      << Value(Data->Type, OldVal) << Data->Type;
+  else
+    Diag(Loc, DL_Error,
+         "negation of %0 cannot be represented in type %1")
+      << Value(Data->Type, OldVal) << Data->Type;
 }
 void __ubsan::__ubsan_handle_negate_overflow_abort(OverflowData *Data,
                                                     ValueHandle OldVal) {





More information about the llvm-commits mailing list