From 2665fbe71e1d1897da3abad6c6cc3c32020e0bff Mon Sep 17 00:00:00 2001 From: Peter Klausler Date: Thu, 9 Jun 2022 17:06:35 -0700 Subject: [PATCH] [flang] NINT(-.4999) is 0, not overflow 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 --- flang/include/flang/Evaluate/real.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/flang/include/flang/Evaluate/real.h b/flang/include/flang/Evaluate/real.h index 2b5562a7eee9..7665c64ef1eb 100644 --- a/flang/include/flang/Evaluate/real.h +++ b/flang/include/flang/Evaluate/real.h @@ -280,8 +280,10 @@ public: 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 = -- 2.34.1