aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_int8.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/btree_gist/btree_int8.c')
-rw-r--r--contrib/btree_gist/btree_int8.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 91f2d032d10..16db0028b7a 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -5,6 +5,7 @@
#include "btree_gist.h"
#include "btree_utils_num.h"
+#include "common/int.h"
typedef struct int64key
{
@@ -99,15 +100,14 @@ int8_dist(PG_FUNCTION_ARGS)
int64 r;
int64 ra;
- r = a - b;
- ra = Abs(r);
-
- /* Overflow check. */
- if (ra < 0 || (!SAMESIGN(a, b) && !SAMESIGN(r, a)))
+ if (pg_sub_s64_overflow(a, b, &r) ||
+ r == INT64_MIN)
ereport(ERROR,
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
errmsg("bigint out of range")));
+ ra = Abs(r);
+
PG_RETURN_INT64(ra);
}