From 9b53d966847c55fbd2bff63b3e1a1c37fc694071 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 17 Jun 2018 16:15:11 -0400 Subject: [PATCH] Suppress -Wshift-negative-value warnings. Clean up four places that result in compiler warnings when using recent gcc with this warning class enabled (as seen on buildfarm members calliphoridae, skink, and others). In all these places, this is purely cosmetic, because the shift distance could not be large enough to risk a change of sign, so there's no chance of implementation-dependent behavior. Still, it's easy enough to avoid the warning by casting the shifted value to unsigned, so let's do that. Patch HEAD only, this isn't worth a back-patch. --- src/backend/utils/adt/inet_cidr_ntop.c | 2 +- src/backend/utils/adt/network.c | 2 +- src/backend/utils/adt/varbit.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/utils/adt/inet_cidr_ntop.c b/src/backend/utils/adt/inet_cidr_ntop.c index 5a30df16e5..a4193e2cce 100644 --- a/src/backend/utils/adt/inet_cidr_ntop.c +++ b/src/backend/utils/adt/inet_cidr_ntop.c @@ -202,7 +202,7 @@ inet_cidr_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) b = bits % 8; if (b != 0) { - m = ~0 << (8 - b); + m = ((u_int) ~0) << (8 - b); inbuf[p - 1] &= m; } diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 350b1a63d2..5af7f4e046 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -1486,7 +1486,7 @@ inetmi(PG_FUNCTION_ARGS) * have to do proper sign extension. */ if (carry == 0 && byte < sizeof(int64)) - res |= ((int64) -1) << (byte * 8); + res |= ((uint64) (int64) -1) << (byte * 8); } PG_RETURN_INT64(res); diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c index 6ba400b699..d8a58160f4 100644 --- a/src/backend/utils/adt/varbit.c +++ b/src/backend/utils/adt/varbit.c @@ -1539,11 +1539,11 @@ bitfromint4(PG_FUNCTION_ARGS) /* store first fractional byte */ if (destbitsleft > srcbitsleft) { - int val = (int) (a >> (destbitsleft - 8)); + unsigned int val = (unsigned int) (a >> (destbitsleft - 8)); /* Force sign-fill in case the compiler implements >> as zero-fill */ if (a < 0) - val |= (-1) << (srcbitsleft + 8 - destbitsleft); + val |= ((unsigned int) -1) << (srcbitsleft + 8 - destbitsleft); *r++ = (bits8) (val & BITMASK); destbitsleft -= 8; } @@ -1619,11 +1619,11 @@ bitfromint8(PG_FUNCTION_ARGS) /* store first fractional byte */ if (destbitsleft > srcbitsleft) { - int val = (int) (a >> (destbitsleft - 8)); + unsigned int val = (unsigned int) (a >> (destbitsleft - 8)); /* Force sign-fill in case the compiler implements >> as zero-fill */ if (a < 0) - val |= (-1) << (srcbitsleft + 8 - destbitsleft); + val |= ((unsigned int) -1) << (srcbitsleft + 8 - destbitsleft); *r++ = (bits8) (val & BITMASK); destbitsleft -= 8; } -- 2.40.0