I was wondering why we have a definition of Abs() in c.h when there are more standard functions such as abs() and fabs() in widespread use. I think this one is left over from pre-ANSI-C days. The attached patches replace all uses of Abs() with more standard functions.

The first patch installs uses of abs() and fabs(). These are already in use in the tree and should be straightforward.

The next two patches install uses of llabs() and fabsf(), which are not in use yet. But they are in C99.

The last patch removes the definition of Abs().


Fun fact: The current definition

    #define Abs(x)         ((x) >= 0 ? (x) : -(x))

is slightly wrong for floating-point values. Abs(-0.0) returns -0.0, but fabs(-0.0) returns +0.0.
From 595664765c53b0ffe0958bbc277bfccf10ea06e0 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Tue, 4 Oct 2022 08:15:13 +0200
Subject: [PATCH 1/4] Remove unnecessary uses of Abs()

Use abs() or fabs() instead.
---
 contrib/btree_gist/btree_date.c           |  4 ++--
 contrib/btree_gist/btree_float8.c         |  4 ++--
 contrib/btree_gist/btree_int2.c           |  2 +-
 contrib/btree_gist/btree_int4.c           |  2 +-
 contrib/btree_gist/btree_interval.c       |  2 +-
 contrib/btree_gist/btree_time.c           |  2 +-
 contrib/btree_gist/btree_ts.c             |  2 +-
 contrib/btree_gist/btree_utils_num.h      |  2 +-
 contrib/btree_gist/btree_utils_var.c      |  2 +-
 contrib/cube/cube.c                       |  2 +-
 contrib/intarray/_int_gist.c              |  3 ++-
 contrib/intarray/_intbig_gist.c           |  4 +++-
 contrib/ltree/_ltree_gist.c               |  4 +++-
 contrib/seg/seg.c                         |  4 ++--
 src/backend/access/gist/gistproc.c        |  4 ++--
 src/backend/optimizer/geqo/geqo_erx.c     |  8 ++++----
 src/backend/partitioning/partbounds.c     |  4 ++--
 src/backend/utils/adt/datetime.c          |  8 ++++----
 src/backend/utils/adt/numeric.c           | 20 ++++++++++----------
 src/backend/utils/adt/rangetypes_gist.c   |  4 ++--
 src/backend/utils/adt/selfuncs.c          |  2 +-
 src/backend/utils/adt/timestamp.c         |  4 ++--
 src/backend/utils/adt/tsgistidx.c         |  2 +-
 src/backend/utils/adt/tsrank.c            |  2 +-
 src/backend/utils/misc/guc.c              |  2 +-
 src/interfaces/ecpg/pgtypeslib/interval.c |  4 ++--
 26 files changed, 54 insertions(+), 49 deletions(-)

diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index 455a265a4975..68a4107dbf08 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -95,7 +95,7 @@ gdb_date_dist(const void *a, const void *b, FmgrInfo *flinfo)
                                                                                
   DateADTGetDatum(*((const DateADT *) a)),
                                                                                
   DateADTGetDatum(*((const DateADT *) b)));
 
-       return (float8) Abs(DatumGetInt32(diff));
+       return (float8) abs(DatumGetInt32(diff));
 }
 
 
@@ -123,7 +123,7 @@ date_dist(PG_FUNCTION_ARGS)
                                                                                
   PG_GETARG_DATUM(0),
                                                                                
   PG_GETARG_DATUM(1));
 
-       PG_RETURN_INT32(Abs(DatumGetInt32(diff)));
+       PG_RETURN_INT32(abs(DatumGetInt32(diff)));
 }
 
 
diff --git a/contrib/btree_gist/btree_float8.c 
b/contrib/btree_gist/btree_float8.c
index b95a08e228bb..081a719b0061 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -79,7 +79,7 @@ gbt_float8_dist(const void *a, const void *b, FmgrInfo 
*flinfo)
        r = arg1 - arg2;
        if (unlikely(isinf(r)) && !isinf(arg1) && !isinf(arg2))
                float_overflow_error();
-       return Abs(r);
+       return fabs(r);
 }
 
 
@@ -110,7 +110,7 @@ float8_dist(PG_FUNCTION_ARGS)
        if (unlikely(isinf(r)) && !isinf(a) && !isinf(b))
                float_overflow_error();
 
-       PG_RETURN_FLOAT8(Abs(r));
+       PG_RETURN_FLOAT8(fabs(r));
 }
 
 /**************************************************
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index a91b95ff3985..fdbf156586c9 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -105,7 +105,7 @@ int2_dist(PG_FUNCTION_ARGS)
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("smallint out of range")));
 
-       ra = Abs(r);
+       ra = abs(r);
 
        PG_RETURN_INT16(ra);
 }
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index 7ea98c478c73..8915fb5d0877 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -106,7 +106,7 @@ int4_dist(PG_FUNCTION_ARGS)
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("integer out of range")));
 
-       ra = Abs(r);
+       ra = abs(r);
 
        PG_RETURN_INT32(ra);
 }
diff --git a/contrib/btree_gist/btree_interval.c 
b/contrib/btree_gist/btree_interval.c
index c2bf82086df4..2c98b330cd7d 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -83,7 +83,7 @@ intr2num(const Interval *i)
 static float8
 gbt_intv_dist(const void *a, const void *b, FmgrInfo *flinfo)
 {
-       return (float8) Abs(intr2num((const Interval *) a) - intr2num((const 
Interval *) b));
+       return fabs(intr2num((const Interval *) a) - intr2num((const Interval 
*) b));
 }
 
 /*
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index fd8774a2f085..d89401c0f51e 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -118,7 +118,7 @@ gbt_time_dist(const void *a, const void *b, FmgrInfo 
*flinfo)
        i = DatumGetIntervalP(DirectFunctionCall2(time_mi_time,
                                                                                
          TimeADTGetDatumFast(*aa),
                                                                                
          TimeADTGetDatumFast(*bb)));
-       return (float8) Abs(INTERVAL_TO_SEC(i));
+       return fabs(INTERVAL_TO_SEC(i));
 }
 
 
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index a51900941e5c..3f5ba91891d8 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -123,7 +123,7 @@ gbt_ts_dist(const void *a, const void *b, FmgrInfo *flinfo)
        i = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi,
                                                                                
          TimestampGetDatumFast(*aa),
                                                                                
          TimestampGetDatumFast(*bb)));
-       return (float8) Abs(INTERVAL_TO_SEC(i));
+       return fabs(INTERVAL_TO_SEC(i));
 }
 
 
diff --git a/contrib/btree_gist/btree_utils_num.h 
b/contrib/btree_gist/btree_utils_num.h
index 415a7a6459a7..11e892311eeb 100644
--- a/contrib/btree_gist/btree_utils_num.h
+++ b/contrib/btree_gist/btree_utils_num.h
@@ -87,7 +87,7 @@ typedef struct
         (ivp)->day * (24.0 * SECS_PER_HOUR) + \
         (ivp)->month * (30.0 * SECS_PER_DAY))
 
-#define GET_FLOAT_DISTANCE(t, arg1, arg2)      Abs( ((float8) *((const t *) 
(arg1))) - ((float8) *((const t *) (arg2))) )
+#define GET_FLOAT_DISTANCE(t, arg1, arg2)      fabs( ((float8) *((const t *) 
(arg1))) - ((float8) *((const t *) (arg2))) )
 
 
 extern Interval *abs_interval(Interval *a);
diff --git a/contrib/btree_gist/btree_utils_var.c 
b/contrib/btree_gist/btree_utils_var.c
index 2886c08b85e4..3ef82d0e208e 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -426,7 +426,7 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const 
GISTENTRY *n,
                        tmp[1] = (unsigned char) (((VARSIZE(uk.lower) - 
VARHDRSZ) <= ul) ? 0 : (VARDATA(uk.lower)[ul]));
                        tmp[2] = (unsigned char) (((VARSIZE(ok.upper) - 
VARHDRSZ) <= ul) ? 0 : (VARDATA(ok.upper)[ul]));
                        tmp[3] = (unsigned char) (((VARSIZE(uk.upper) - 
VARHDRSZ) <= ul) ? 0 : (VARDATA(uk.upper)[ul]));
-                       dres = Abs(tmp[0] - tmp[1]) + Abs(tmp[3] - tmp[2]);
+                       dres = abs(tmp[0] - tmp[1]) + abs(tmp[3] - tmp[2]);
                        dres /= 256.0;
                }
 
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 01c6a9c5563e..4f32c5dc1d59 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -925,7 +925,7 @@ rt_cube_size(NDBOX *a, double *size)
        {
                result = 1.0;
                for (i = 0; i < DIM(a); i++)
-                       result *= Abs(UR_COORD(a, i) - LL_COORD(a, i));
+                       result *= fabs(UR_COORD(a, i) - LL_COORD(a, i));
        }
        *size = result;
 }
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index 6378aa74b079..f67699bfccc5 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -4,6 +4,7 @@
 #include "postgres.h"
 
 #include <limits.h>
+#include <math.h>
 
 #include "_int.h"
 #include "access/gist.h"
@@ -539,7 +540,7 @@ g_int_picksplit(PG_FUNCTION_ARGS)
                union_d = inner_int_union(datum_r, datum_alpha);
                rt__int_size(union_d, &size_beta);
                pfree(union_d);
-               costvector[i - 1].cost = Abs((size_alpha - size_l) - (size_beta 
- size_r));
+               costvector[i - 1].cost = fabs((size_alpha - size_l) - 
(size_beta - size_r));
        }
        qsort((void *) costvector, maxoff, sizeof(SPLITCOST), comparecost);
 
diff --git a/contrib/intarray/_intbig_gist.c b/contrib/intarray/_intbig_gist.c
index c9d8f9b84ddd..887940ca3586 100644
--- a/contrib/intarray/_intbig_gist.c
+++ b/contrib/intarray/_intbig_gist.c
@@ -3,6 +3,8 @@
  */
 #include "postgres.h"
 
+#include <math.h>
+
 #include "_int.h"
 #include "access/gist.h"
 #include "access/reloptions.h"
@@ -389,7 +391,7 @@ g_intbig_picksplit(PG_FUNCTION_ARGS)
                _j = GETENTRY(entryvec, j);
                size_alpha = hemdist(datum_l, _j, siglen);
                size_beta = hemdist(datum_r, _j, siglen);
-               costvector[j - 1].cost = Abs(size_alpha - size_beta);
+               costvector[j - 1].cost = abs(size_alpha - size_beta);
        }
        qsort((void *) costvector, maxoff, sizeof(SPLITCOST), comparecost);
 
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c
index 88d462362191..385a10283b04 100644
--- a/contrib/ltree/_ltree_gist.c
+++ b/contrib/ltree/_ltree_gist.c
@@ -7,6 +7,8 @@
  */
 #include "postgres.h"
 
+#include <math.h>
+
 #include "access/gist.h"
 #include "access/reloptions.h"
 #include "access/stratnum.h"
@@ -315,7 +317,7 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
                _j = GETENTRY(entryvec, j);
                size_alpha = hemdist(datum_l, _j, siglen);
                size_beta = hemdist(datum_r, _j, siglen);
-               costvector[j - 1].cost = Abs(size_alpha - size_beta);
+               costvector[j - 1].cost = abs(size_alpha - size_beta);
        }
        qsort((void *) costvector, maxoff, sizeof(SPLITCOST), comparecost);
 
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c
index cb677e0ae51c..9b58675266ab 100644
--- a/contrib/seg/seg.c
+++ b/contrib/seg/seg.c
@@ -952,7 +952,7 @@ restore(char *result, float val, int n)
        }
        else
        {
-               if (Abs(exp) <= 4)
+               if (abs(exp) <= 4)
                {
                        /*
                         * remove the decimal point from the mantissa and write 
the digits
@@ -1039,7 +1039,7 @@ restore(char *result, float val, int n)
                        }
                }
 
-               /* do nothing for Abs(exp) > 4; %e must be OK */
+               /* do nothing for abs(exp) > 4; %e must be OK */
                /* just get rid of zeroes after [eE]- and +zeroes after [Ee]. */
 
                /* ... this is not done yet. */
diff --git a/src/backend/access/gist/gistproc.c 
b/src/backend/access/gist/gistproc.c
index 22f2c1853706..406c65d6ec22 100644
--- a/src/backend/access/gist/gistproc.c
+++ b/src/backend/access/gist/gistproc.c
@@ -797,8 +797,8 @@ gist_box_picksplit(PG_FUNCTION_ARGS)
                for (i = 0; i < commonEntriesCount; i++)
                {
                        box = 
DatumGetBoxP(entryvec->vector[commonEntries[i].index].key);
-                       commonEntries[i].delta = 
Abs(float8_mi(box_penalty(leftBox, box),
-                                                                               
                   box_penalty(rightBox, box)));
+                       commonEntries[i].delta = 
fabs(float8_mi(box_penalty(leftBox, box),
+                                                                               
                        box_penalty(rightBox, box)));
                }
 
                /*
diff --git a/src/backend/optimizer/geqo/geqo_erx.c 
b/src/backend/optimizer/geqo/geqo_erx.c
index cc0661365f6e..21ad7854118b 100644
--- a/src/backend/optimizer/geqo/geqo_erx.c
+++ b/src/backend/optimizer/geqo/geqo_erx.c
@@ -162,7 +162,7 @@ gimme_edge(PlannerInfo *root, Gene gene1, Gene gene2, Edge 
*edge_table)
 
        for (i = 0; i < edges; i++)
        {
-               if ((Gene) Abs(edge_table[city1].edge_list[i]) == city2)
+               if ((Gene) abs(edge_table[city1].edge_list[i]) == city2)
                {
 
                        /* mark shared edges as negative */
@@ -249,14 +249,14 @@ remove_gene(PlannerInfo *root, Gene gene, Edge edge, Edge 
*edge_table)
 
        for (i = 0; i < edge.unused_edges; i++)
        {
-               possess_edge = (int) Abs(edge.edge_list[i]);
+               possess_edge = abs(edge.edge_list[i]);
                genes_remaining = edge_table[possess_edge].unused_edges;
 
                /* find the input gene in all edge_lists and delete it */
                for (j = 0; j < genes_remaining; j++)
                {
 
-                       if ((Gene) Abs(edge_table[possess_edge].edge_list[j]) 
== gene)
+                       if ((Gene) abs(edge_table[possess_edge].edge_list[j]) 
== gene)
                        {
 
                                edge_table[possess_edge].unused_edges--;
@@ -307,7 +307,7 @@ gimme_gene(PlannerInfo *root, Edge edge, Edge *edge_table)
                 * converting to absolute values
                 */
                if (friend < 0)
-                       return (Gene) Abs(friend);
+                       return (Gene) abs(friend);
 
 
                /*
diff --git a/src/backend/partitioning/partbounds.c 
b/src/backend/partitioning/partbounds.c
index 7f74ed212f8c..ba4045f562b9 100644
--- a/src/backend/partitioning/partbounds.c
+++ b/src/backend/partitioning/partbounds.c
@@ -3206,7 +3206,7 @@ check_new_partition_bound(char *relname, Relation parent,
                                                                 * datums list.
                                                                 */
                                                                
PartitionRangeDatum *datum =
-                                                               
list_nth(spec->upperdatums, Abs(cmpval) - 1);
+                                                               
list_nth(spec->upperdatums, abs(cmpval) - 1);
 
                                                                /*
                                                                 * The new 
partition overlaps with the
@@ -3232,7 +3232,7 @@ check_new_partition_bound(char *relname, Relation parent,
                                                 * if we have equality, point 
to the first one.
                                                 */
                                                datum = cmpval == 0 ? 
linitial(spec->lowerdatums) :
-                                                       
list_nth(spec->lowerdatums, Abs(cmpval) - 1);
+                                                       
list_nth(spec->lowerdatums, abs(cmpval) - 1);
                                                overlap = true;
                                                overlap_location = 
datum->location;
                                                with = 
boundinfo->indexes[offset + 1];
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 350039cc8669..18517fd85cbd 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -448,14 +448,14 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int 
precision, bool fillzeros)
        Assert(precision >= 0);
 
        if (fillzeros)
-               cp = pg_ultostr_zeropad(cp, Abs(sec), 2);
+               cp = pg_ultostr_zeropad(cp, abs(sec), 2);
        else
-               cp = pg_ultostr(cp, Abs(sec));
+               cp = pg_ultostr(cp, abs(sec));
 
        /* fsec_t is just an int32 */
        if (fsec != 0)
        {
-               int32           value = Abs(fsec);
+               int32           value = abs(fsec);
                char       *end = &cp[precision + 1];
                bool            gotnonzero = false;
 
@@ -490,7 +490,7 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int 
precision, bool fillzeros)
                 * which will generate a correct answer in the minimum valid 
width.
                 */
                if (value)
-                       return pg_ultostr(cp, Abs(fsec));
+                       return pg_ultostr(cp, abs(fsec));
 
                return end;
        }
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 85ee9ec42606..cafe1ac47b04 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -8870,7 +8870,7 @@ div_var_fast(const NumericVar *var1, const NumericVar 
*var2,
                if (qdigit != 0)
                {
                        /* Do we need to normalize now? */
-                       maxdiv += Abs(qdigit);
+                       maxdiv += abs(qdigit);
                        if (maxdiv > (INT_MAX - INT_MAX / NBASE - 1) / (NBASE - 
1))
                        {
                                /*
@@ -8923,7 +8923,7 @@ div_var_fast(const NumericVar *var1, const NumericVar 
*var2,
                                fquotient = fdividend * fdivisorinverse;
                                qdigit = (fquotient >= 0.0) ? ((int) fquotient) 
:
                                        (((int) fquotient) - 1);        /* 
truncate towards -infinity */
-                               maxdiv += Abs(qdigit);
+                               maxdiv += abs(qdigit);
                        }
 
                        /*
@@ -9107,7 +9107,7 @@ div_var_int(const NumericVar *var, int ival, int 
ival_weight,
         * become as large as divisor * NBASE - 1, and so it requires a 64-bit
         * integer if this exceeds UINT_MAX.
         */
-       divisor = Abs(ival);
+       divisor = abs(ival);
 
        if (divisor <= UINT_MAX / NBASE)
        {
@@ -9948,7 +9948,7 @@ exp_var(const NumericVar *arg, NumericVar *result, int 
rscale)
 
        /* Guard against overflow/underflow */
        /* If you change this limit, see also power_var()'s limit */
-       if (Abs(val) >= NUMERIC_MAX_RESULT_SCALE * 3)
+       if (fabs(val) >= NUMERIC_MAX_RESULT_SCALE * 3)
        {
                if (val > 0)
                        ereport(ERROR,
@@ -9966,15 +9966,15 @@ exp_var(const NumericVar *arg, NumericVar *result, int 
rscale)
         * Reduce x to the range -0.01 <= x <= 0.01 (approximately) by dividing 
by
         * 2^ndiv2, to improve the convergence rate of the Taylor series.
         *
-        * Note that the overflow check above ensures that Abs(x) < 6000, which
+        * Note that the overflow check above ensures that fabs(x) < 6000, which
         * means that ndiv2 <= 20 here.
         */
-       if (Abs(val) > 0.01)
+       if (fabs(val) > 0.01)
        {
                ndiv2 = 1;
                val /= 2;
 
-               while (Abs(val) > 0.01)
+               while (fabs(val) > 0.01)
                {
                        ndiv2++;
                        val /= 2;
@@ -10116,7 +10116,7 @@ estimate_ln_dweight(const NumericVar *var)
                         *----------
                         */
                        ln_var = log((double) digits) + dweight * 
2.302585092994046;
-                       ln_dweight = (int) log10(Abs(ln_var));
+                       ln_dweight = (int) log10(fabs(ln_var));
                }
                else
                {
@@ -10427,7 +10427,7 @@ power_var(const NumericVar *base, const NumericVar 
*exp, NumericVar *result)
        val = numericvar_to_double_no_overflow(&ln_num);
 
        /* initial overflow/underflow test with fuzz factor */
-       if (Abs(val) > NUMERIC_MAX_RESULT_SCALE * 3.01)
+       if (fabs(val) > NUMERIC_MAX_RESULT_SCALE * 3.01)
        {
                if (val > 0)
                        ereport(ERROR,
@@ -10583,7 +10583,7 @@ power_var_int(const NumericVar *base, int exp, 
NumericVar *result, int rscale)
         * Now we can proceed with the multiplications.
         */
        neg = (exp < 0);
-       mask = Abs(exp);
+       mask = abs(exp);
 
        init_var(&base_prod);
        set_var_from_var(base, &base_prod);
diff --git a/src/backend/utils/adt/rangetypes_gist.c 
b/src/backend/utils/adt/rangetypes_gist.c
index 777fdf0e2e96..5996de417de5 100644
--- a/src/backend/utils/adt/rangetypes_gist.c
+++ b/src/backend/utils/adt/rangetypes_gist.c
@@ -743,8 +743,8 @@ range_gist_picksplit(PG_FUNCTION_ARGS)
                        emptyCount = total_count - nonEmptyCount;
 
                        if (infCount > 0 && nonInfCount > 0 &&
-                               (Abs(infCount - nonInfCount) <=
-                                Abs(emptyCount - nonEmptyCount)))
+                               (abs(infCount - nonInfCount) <=
+                                abs(emptyCount - nonEmptyCount)))
                        {
                                classes_groups[CLS_NORMAL] = SPLIT_RIGHT;
                                classes_groups[CLS_CONTAIN_EMPTY] = SPLIT_RIGHT;
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 234fb6658062..69e0fb98f5b2 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -7835,7 +7835,7 @@ brincostestimate(PlannerInfo *root, IndexPath *path, 
double loop_count,
                                double          varCorrelation = 0.0;
 
                                if (sslot.nnumbers > 0)
-                                       varCorrelation = Abs(sslot.numbers[0]);
+                                       varCorrelation = fabs(sslot.numbers[0]);
 
                                if (varCorrelation > *indexCorrelation)
                                        *indexCorrelation = varCorrelation;
diff --git a/src/backend/utils/adt/timestamp.c 
b/src/backend/utils/adt/timestamp.c
index 9799647e1a54..d8552a1f1864 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -3290,7 +3290,7 @@ interval_mul(PG_FUNCTION_ARGS)
         * cascade from months and days.  It might still be >24 if the 
combination
         * of cascade and the seconds factor operation itself.
         */
-       if (Abs(sec_remainder) >= SECS_PER_DAY)
+       if (fabs(sec_remainder) >= SECS_PER_DAY)
        {
                result->day += (int) (sec_remainder / SECS_PER_DAY);
                sec_remainder -= (int) (sec_remainder / SECS_PER_DAY) * 
SECS_PER_DAY;
@@ -3347,7 +3347,7 @@ interval_div(PG_FUNCTION_ARGS)
        sec_remainder = (orig_day / factor - result->day +
                                         month_remainder_days - (int) 
month_remainder_days) * SECS_PER_DAY;
        sec_remainder = TSROUND(sec_remainder);
-       if (Abs(sec_remainder) >= SECS_PER_DAY)
+       if (fabs(sec_remainder) >= SECS_PER_DAY)
        {
                result->day += (int) (sec_remainder / SECS_PER_DAY);
                sec_remainder -= (int) (sec_remainder / SECS_PER_DAY) * 
SECS_PER_DAY;
diff --git a/src/backend/utils/adt/tsgistidx.c 
b/src/backend/utils/adt/tsgistidx.c
index fe438f1c4d3f..728b5e9e7130 100644
--- a/src/backend/utils/adt/tsgistidx.c
+++ b/src/backend/utils/adt/tsgistidx.c
@@ -700,7 +700,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
                costvector[j - 1].pos = j;
                size_alpha = hemdistcache(&(cache[seed_1]), &(cache[j]), 
siglen);
                size_beta = hemdistcache(&(cache[seed_2]), &(cache[j]), siglen);
-               costvector[j - 1].cost = Abs(size_alpha - size_beta);
+               costvector[j - 1].cost = abs(size_alpha - size_beta);
        }
        qsort((void *) costvector, maxoff, sizeof(SPLITCOST), comparecost);
 
diff --git a/src/backend/utils/adt/tsrank.c b/src/backend/utils/adt/tsrank.c
index 3858fc59281c..e353669dbaa1 100644
--- a/src/backend/utils/adt/tsrank.c
+++ b/src/backend/utils/adt/tsrank.c
@@ -257,7 +257,7 @@ calc_rank_and(const float *w, TSVector t, TSQuery q)
                                {
                                        for (p = 0; p < lenct; p++)
                                        {
-                                               dist = Abs((int) 
WEP_GETPOS(post[l]) - (int) WEP_GETPOS(ct[p]));
+                                               dist = abs((int) 
WEP_GETPOS(post[l]) - (int) WEP_GETPOS(ct[p]));
                                                if (dist || (dist == 0 && 
(pos[i] == POSNULL || pos[k] == POSNULL)))
                                                {
                                                        float           curw;
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 013576603598..f997ec0f822f 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -5378,7 +5378,7 @@ estimate_variable_size(struct config_generic *gconf)
                                 * small values.  Maximum value is 2147483647, 
i.e. 10 chars.
                                 * Include one byte for sign.
                                 */
-                               if (Abs(*conf->variable) < 1000)
+                               if (abs(*conf->variable) < 1000)
                                        valsize = 3 + 1;
                                else
                                        valsize = 10 + 1;
diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c 
b/src/interfaces/ecpg/pgtypeslib/interval.c
index 73bde94aaf0d..dc083c13272b 100644
--- a/src/interfaces/ecpg/pgtypeslib/interval.c
+++ b/src/interfaces/ecpg/pgtypeslib/interval.c
@@ -742,9 +742,9 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int 
precision, bool fillzeros)
        else
        {
                if (fillzeros)
-                       sprintf(cp, "%02d.%0*d", abs(sec), precision, (int) 
Abs(fsec));
+                       sprintf(cp, "%02d.%0*d", abs(sec), precision, 
abs(fsec));
                else
-                       sprintf(cp, "%d.%0*d", abs(sec), precision, (int) 
Abs(fsec));
+                       sprintf(cp, "%d.%0*d", abs(sec), precision, abs(fsec));
                TrimTrailingZeros(cp);
        }
 }
-- 
2.37.3

From a762dbd5f60276f9528e9bd78079da7fcc773fde Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Tue, 4 Oct 2022 08:15:13 +0200
Subject: [PATCH 2/4] Use llabs() instead of Abs() where appropriate

---
 contrib/btree_gist/btree_cash.c  | 2 +-
 contrib/btree_gist/btree_int8.c  | 2 +-
 src/backend/utils/adt/datetime.c | 8 ++++----
 src/backend/utils/adt/dbsize.c   | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index 6ac97e2b12a8..d1711137a10d 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -106,7 +106,7 @@ cash_dist(PG_FUNCTION_ARGS)
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("money out of range")));
 
-       ra = Abs(r);
+       ra = llabs(r);
 
        PG_RETURN_CASH(ra);
 }
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index df2b0d174b96..fb58ab1b8295 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -106,7 +106,7 @@ int8_dist(PG_FUNCTION_ARGS)
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("bigint out of range")));
 
-       ra = Abs(r);
+       ra = llabs(r);
 
        PG_RETURN_INT64(ra);
 }
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 18517fd85cbd..2f6aba62576a 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -4468,7 +4468,7 @@ AddVerboseIntPart(char *cp, int64 value, const char 
*units,
        if (*is_zero)
        {
                *is_before = (value < 0);
-               value = Abs(value);
+               value = llabs(value);
        }
        else if (*is_before)
                value = -value;
@@ -4569,8 +4569,8 @@ EncodeInterval(struct pg_itm *itm, int style, char *str)
 
                                        sprintf(cp, "%c%d-%d %c%lld 
%c%lld:%02d:",
                                                        year_sign, abs(year), 
abs(mon),
-                                                       day_sign, (long long) 
Abs(mday),
-                                                       sec_sign, (long long) 
Abs(hour), abs(min));
+                                                       day_sign, llabs(mday),
+                                                       sec_sign, llabs(hour), 
abs(min));
                                        cp += strlen(cp);
                                        cp = AppendSeconds(cp, sec, fsec, 
MAX_INTERVAL_PRECISION, true);
                                        *cp = '\0';
@@ -4642,7 +4642,7 @@ EncodeInterval(struct pg_itm *itm, int style, char *str)
                                sprintf(cp, "%s%s%02lld:%02d:",
                                                is_zero ? "" : " ",
                                                (minus ? "-" : (is_before ? "+" 
: "")),
-                                               (long long) Abs(hour), 
abs(min));
+                                               llabs(hour), abs(min));
                                cp += strlen(cp);
                                cp = AppendSeconds(cp, sec, fsec, 
MAX_INTERVAL_PRECISION, true);
                                *cp = '\0';
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c
index 34efa121b404..1e1a60e18483 100644
--- a/src/backend/utils/adt/dbsize.c
+++ b/src/backend/utils/adt/dbsize.c
@@ -564,7 +564,7 @@ pg_size_pretty(PG_FUNCTION_ARGS)
                uint8           bits;
 
                /* use this unit if there are no more units or we're below the 
limit */
-               if (unit[1].name == NULL || Abs(size) < unit->limit)
+               if (unit[1].name == NULL || llabs(size) < unit->limit)
                {
                        if (unit->round)
                                size = half_rounded(size);
-- 
2.37.3

From e69d3d01a6b2298d8c228bf33e96f86c3908dc7e Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Tue, 4 Oct 2022 08:15:13 +0200
Subject: [PATCH 3/4] Use fabsf() instead of Abs() where appropriate

---
 contrib/btree_gist/btree_float4.c | 2 +-
 contrib/intarray/_int_gist.c      | 2 +-
 contrib/seg/seg.c                 | 5 +++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/contrib/btree_gist/btree_float4.c 
b/contrib/btree_gist/btree_float4.c
index 3cbd9a06dccf..84ca5eee5012 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -102,7 +102,7 @@ float4_dist(PG_FUNCTION_ARGS)
        if (unlikely(isinf(r)) && !isinf(a) && !isinf(b))
                float_overflow_error();
 
-       PG_RETURN_FLOAT4(Abs(r));
+       PG_RETURN_FLOAT4(fabsf(r));
 }
 
 
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index f67699bfccc5..331fa25fcf72 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -540,7 +540,7 @@ g_int_picksplit(PG_FUNCTION_ARGS)
                union_d = inner_int_union(datum_r, datum_alpha);
                rt__int_size(union_d, &size_beta);
                pfree(union_d);
-               costvector[i - 1].cost = fabs((size_alpha - size_l) - 
(size_beta - size_r));
+               costvector[i - 1].cost = fabsf((size_alpha - size_l) - 
(size_beta - size_r));
        }
        qsort((void *) costvector, maxoff, sizeof(SPLITCOST), comparecost);
 
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c
index 9b58675266ab..e964560053d1 100644
--- a/contrib/seg/seg.c
+++ b/contrib/seg/seg.c
@@ -10,6 +10,7 @@
 #include "postgres.h"
 
 #include <float.h>
+#include <math.h>
 
 #include "access/gist.h"
 #include "access/stratnum.h"
@@ -706,7 +707,7 @@ rt_seg_size(SEG *a, float *size)
        if (a == (SEG *) NULL || a->upper <= a->lower)
                *size = 0.0;
        else
-               *size = (float) Abs(a->upper - a->lower);
+               *size = fabsf(a->upper - a->lower);
 }
 
 Datum
@@ -714,7 +715,7 @@ seg_size(PG_FUNCTION_ARGS)
 {
        SEG                *seg = PG_GETARG_SEG_P(0);
 
-       PG_RETURN_FLOAT4((float) Abs(seg->upper - seg->lower));
+       PG_RETURN_FLOAT4(fabsf(seg->upper - seg->lower));
 }
 
 
-- 
2.37.3

From 402d8533f265cf375ca4606e50870093fe6cdf4c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Tue, 4 Oct 2022 08:15:14 +0200
Subject: [PATCH 4/4] Remove Abs()

---
 src/include/c.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/src/include/c.h b/src/include/c.h
index c8f72e44d894..c7a3288b49f0 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -975,12 +975,6 @@ extern void ExceptionalCondition(const char *conditionName,
  */
 #define Min(x, y)              ((x) < (y) ? (x) : (y))
 
-/*
- * Abs
- *             Return the absolute value of the argument.
- */
-#define Abs(x)                 ((x) >= 0 ? (x) : -(x))
-
 
 /* Get a bit mask of the bits set in non-long aligned addresses */
 #define LONG_ALIGN_MASK (sizeof(long) - 1)
-- 
2.37.3

Reply via email to