[Bug libgcc/70800] libgcc/config/libbid/bid_binarydecimal.c: suspicious comparison ?

dcb314 at hotmail dot com gcc-bugzilla@gcc.gnu.org
Sun Jan 22 22:41:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70800

--- Comment #1 from David Binderman <dcb314 at hotmail dot com> ---
Given the following source code

extern void g(int n);

void f( int n)
{
        if ((n & 0x30) == 1)
                g( n);
}

Current trunk gcc can't find much wrong:

$ ~/gcc/results/bin/gcc -c -g -O2 -Wall -Wextra -Wtype-limits jan22a.cc
$

If it could, then these four known bugs in the gcc source code could be found

$ grep "Expression .* is always" ~/gcc/cppcheck.20170120.out 
[trunk/libgcc/config/libbid/bid_binarydecimal.c:143933]: (style) Expression '(X
& 0xffff) > 0xf423f' is always false.
[trunk/libgcc/config/libbid/bid_binarydecimal.c:144327]: (style) Expression '(X
& 0xffff) > 0xf423f' is always false.
[trunk/libgcc/config/libbid/bid_binarydecimal.c:144723]: (style) Expression '(X
& 0xffff) > 0xf423f' is always false.
[trunk/libgcc/config/libbid/bid_binarydecimal.c:145133]: (style) Expression '(X
& 0xffff) > 0xf423f' is always false.
$

and indeed, six bugs in the linux kernel could also be found:

$ grep "Expression .* is always" ~/linuxKernel/cppcheck.410-rc4.out 
[linux-4.10-rc4/arch/mips/include/asm/netlogic/xlr/fmn.h:304]: (style)
Expression '(X & 0x2) == 0x1' is always false.
[linux-4.10-rc4/drivers/block/sx8.c:1077]: (style) Expression '(X & 0x1f) <
0x20' is always true.
[linux-4.10-rc4/drivers/dma/txx9dmac.c:743]: (style) Expression '(X & 0xff) <=
0xff' is always true.
[linux-4.10-rc4/drivers/dma/txx9dmac.c:748]: (style) Expression '(X & 0x7f) <=
0x7f' is always true.
[linux-4.10-rc4/drivers/staging/rts5208/sd.c:4129]: (style) Expression '(X &
0x1e) != 0x3' is always true.
[linux-4.10-rc4/samples/bpf/sockex3_kern.c:268]: (style) Expression '(X & 0xf0)
== 0x4' is always false.
$


More information about the Gcc-bugs mailing list