[flang-commits] [flang] 9f9e9d9 - [flang] SET_EXPONENT(-0.0) should return -0.0

Peter Steinfeld via flang-commits flang-commits at lists.llvm.org
Thu Jul 7 12:44:16 PDT 2022


Author: Peter Steinfeld
Date: 2022-07-07T12:43:30-07:00
New Revision: 9f9e9d9cfc2e2f929c17de4a1065c0eb68e479c0

URL: https://github.com/llvm/llvm-project/commit/9f9e9d9cfc2e2f929c17de4a1065c0eb68e479c0
DIFF: https://github.com/llvm/llvm-project/commit/9f9e9d9cfc2e2f929c17de4a1065c0eb68e479c0.diff

LOG: [flang] SET_EXPONENT(-0.0) should return -0.0

Section 16.9.171 says:

If X has the value zero, the result has the same value as X

So if X is -0.0, SET_EXPONENT should return -0.0.

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

Added: 
    

Modified: 
    flang/runtime/numeric.cpp

Removed: 
    


################################################################################
diff  --git a/flang/runtime/numeric.cpp b/flang/runtime/numeric.cpp
index 8d0297317b4df..a989d3a43a4d0 100644
--- a/flang/runtime/numeric.cpp
+++ b/flang/runtime/numeric.cpp
@@ -122,7 +122,7 @@ template <typename T> inline T SetExponent(T x, std::int64_t p) {
   } else if (std::isinf(x)) {
     return std::numeric_limits<T>::quiet_NaN(); // +/-Inf -> NaN
   } else if (x == 0) {
-    return 0; // 0 -> 0
+    return x; // return negative zero if x is negative zero
   } else {
     int expo{std::ilogb(x) + 1};
     auto ip{static_cast<int>(p - expo)};


        


More information about the flang-commits mailing list