Re: Remove dependence on integer wrapping - Mailing list pgsql-hackers

From Nathan Bossart
Subject Re: Remove dependence on integer wrapping
Date
Msg-id ZrON1CT7Lk9_EJOG@nathan
Whole thread Raw
In response to Re: Remove dependence on integer wrapping  (Nathan Bossart <nathandbossart@gmail.com>)
Responses Re: Remove dependence on integer wrapping
List pgsql-hackers
I started looking at 0001 again with the intent of committing it, and this
caught my eye:

-        /* make the amount positive for digit-reconstruction loop */
-        value = -value;
+        /*
+         * make the amount positive for digit-reconstruction loop, we can
+         * leave INT64_MIN unchanged
+         */
+        pg_neg_s64_overflow(value, &value);

The comment mentions that we can leave the minimum value unchanged, but it
doesn't explain why.  Can we explain why?

+static inline bool
+pg_neg_s64_overflow(int64 a, int64 *result)
+{
+    if (unlikely(a == PG_INT64_MIN))
+    {
+        return true;
+    }
+    else
+    {
+        *result = -a;
+        return false;
+    }
+}

Can we add a comment that these routines do not set "result" when true is
returned?

-- 
nathan



pgsql-hackers by date:

Previous
From: Aleksander Alekseev
Date:
Subject: Re: Fsync (flush) all inserted WAL records
Next
From: Robert Haas
Date:
Subject: Re: Remaining dependency on setlocale()