Overflow detection in the folding of int/nint/ceiling is
incorrectly signalling overflow when a negative argument yields
a zero result.
Differential Revision: https://reviews.llvm.org/
D127785
if (IsSignBitSet()) {
result.value = result.value.Negate().value;
}
- if (IsSignBitSet() != result.value.IsNegative()) {
- result.flags.set(RealFlag::Overflow);
+ if (!result.value.IsZero()) {
+ if (IsSignBitSet() != result.value.IsNegative()) {
+ result.flags.set(RealFlag::Overflow);
+ }
}
if (result.flags.test(RealFlag::Overflow)) {
result.value =