[PATCH] D25295: [ubsan] Handle undef values in the integer overflow diagnostic

Filipe Cabecinhas via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 21 03:17:39 PDT 2016

filcab added a comment.

In https://reviews.llvm.org/D25295#568734, @vsk wrote:

> In particular, I'd be interested in any alternative implementations of hasIntegerOverflow, since the current version can't handle overflows in 128-bit integers.

You can use `#if HAVE_INT128_T` (and `UIntMax`) to get 128 bit integers if available.

Why is the test a `bc` file instead of the plain `ll` file?
Better yet: Can you get a reproducible for this bug in C/C++? (I can't get your original example to trigger the bug) Would be better, and closer to UBSan uses.

Thank you,

Comment at: lib/ubsan/ubsan_handlers.cc:115
+  default:
+    return 0;
+  }
Don't make errors disappear like this. Add an `UNREACHABLE()` to the default case.

Comment at: lib/ubsan/ubsan_handlers.cc:123
+  if (IsSigned) {
+    SIntMax V = evaluateOperation(L.getSIntValue(), Operator, R.getSIntValue());
+    auto UpperLimit =
Won't you overflow if the values would overflow (for the case where your values are the same type as `SIntMax`)?

Comment at: lib/ubsan/ubsan_handlers.cc:128
+    if (V > UpperLimit || V < LowerLimit)
+      return true;
+  } else {
`return V > UpperLimit || V < LowerLimit;`
Then remove the indentation level for the `else`, make the same transformation, and remove the `return false;` at the end.


More information about the llvm-commits mailing list