On Sun, Dec 04, 2005 at 12:45:18AM +0200, Ruslan Ermilov wrote: > Hi there, > > cpp(1) only supports integer expressions, so the following > > #define FOO foo > #if FOO == bar > > will always evaluate to true, because "foo" and "bar" will > be treated as zeroes, as explained in cpp.info. > > I've only scanned for _MACHINE_ARCH, because that's how I > discovered it, and there's a couple of places where the > code is broken: > > sys/dev/isp/isp_freebsd.h:#if _MACHINE_ARCH == sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH == sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH == sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH == sparc64 > sys/gnu/fs/reiserfs/reiserfs_fs.h:#if (_MACHINE_ARCH == amd64) > sys/netgraph/ng_vjc.c:#if _MACHINE_ARCH == i386 > sys/netgraph/ng_vjc.c:#elif _MACHINE_ARCH == alpha > sys/netgraph/ng_vjc.c:#error Unspported _MACHINE_ARCH > > In these cases, the right tests would be #ifdef __sparc64__. > Other instances (of not _MACHINE_ARCH) may be harder to > fix. The ng_vjc.c is a nice example that clearly > demonstrates (without compiling the code) that it's > broken -- it's compiled on all architectures, but has > the following code: > > #if _MACHINE_ARCH == i386 > #define NG_VJC_TSTATE_PTR_TYPE &ng_parse_uint32_type > #elif _MACHINE_ARCH == alpha > #define NG_VJC_TSTATE_PTR_TYPE &ng_parse_uint64_type > #else > #error Unspported _MACHINE_ARCH > #endif > > The season for more bugs of this type is declared open! :-) > ``cpp -Wundef'' will allow us to find all these bugs. Cheers, -- Ruslan Ermilov ru_at_FreeBSD.org FreeBSD committer
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:48 UTC