]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: tools: fix a build warning on some 32-bit archs
authorWilly Tarreau <w@1wt.eu>
Mon, 18 Mar 2019 15:31:18 +0000 (16:31 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 18 Mar 2019 15:33:15 +0000 (16:33 +0100)
Some recent versions of gcc apparently can detect that x >> 32 will not
work on a 32-bit architecture, but are failing to see that the code will
not be built since it's enclosed in "if (sizeof(LONG) > 4)" or equivalent.
Just shift right twice by 16 bits in this case, the compiler correctly
replaces it by a single 32-bit shift.

No backport is needed.

src/standard.c

index 2bc4405fb721dff0e085a55e0e1ad29605ac7346..03072b96b906781858056b3074d8bb5862fecc88 100644 (file)
@@ -2672,7 +2672,8 @@ unsigned int mask_find_rank_bit(unsigned int r, unsigned long m)
        t = 0;
        s = LONGBITS;
        if (s > 32) {
-               t = (d >> 32) + (d >> 48);
+               unsigned long d2 = (d >> 16) >> 16;
+               t = d2 + (d2 >> 16);
                s -= ((t - r) & 256) >> 3; r -= (t & ((t - r) >> 8));
        }
 
@@ -2706,7 +2707,8 @@ unsigned int mask_find_rank_bit_fast(unsigned int r, unsigned long m,
        t = 0;
        s = LONGBITS;
        if (s > 32) {
-               t = (d >> 32) + (d >> 48);
+               unsigned long d2 = (d >> 16) >> 16;
+               t = d2 + (d2 >> 16);
                s -= ((t - r) & 256) >> 3; r -= (t & ((t - r) >> 8));
        }