Date: Sun, 4 Dec 2005 00:55:17 +0200 From: Ruslan Ermilov <ru@FreeBSD.org> To: current@FreeBSD.org Subject: Re: Beware of subtle bugs due to cpp(1) limitations! Message-ID: <20051203225517.GK960@ip.net.ua> In-Reply-To: <20051203224518.GJ960@ip.net.ua> References: <20051203224518.GJ960@ip.net.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--c8JyeaiReRNoiMDS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, Dec 04, 2005 at 12:45:18AM +0200, Ruslan Ermilov wrote: > Hi there, >=20 > cpp(1) only supports integer expressions, so the following >=20 > #define FOO foo > #if FOO =3D=3D bar >=20 > will always evaluate to true, because "foo" and "bar" will > be treated as zeroes, as explained in cpp.info. >=20 > 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: >=20 > sys/dev/isp/isp_freebsd.h:#if _MACHINE_ARCH =3D=3D sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH =3D=3D sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH =3D=3D sparc64 > sys/dev/ispfw/ispfw.c:#if _MACHINE_ARCH =3D=3D sparc64 > sys/gnu/fs/reiserfs/reiserfs_fs.h:#if (_MACHINE_ARCH =3D=3D amd64) > sys/netgraph/ng_vjc.c:#if _MACHINE_ARCH =3D=3D i386 > sys/netgraph/ng_vjc.c:#elif _MACHINE_ARCH =3D=3D alpha > sys/netgraph/ng_vjc.c:#error Unspported _MACHINE_ARCH >=20 > 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: >=20 > #if _MACHINE_ARCH =3D=3D i386 > #define NG_VJC_TSTATE_PTR_TYPE &ng_parse_uint32_type > #elif _MACHINE_ARCH =3D=3D alpha > #define NG_VJC_TSTATE_PTR_TYPE &ng_parse_uint64_type > #else > #error Unspported _MACHINE_ARCH > #endif >=20 > The season for more bugs of this type is declared open! :-) >=20 ``cpp -Wundef'' will allow us to find all these bugs. Cheers, --=20 Ruslan Ermilov ru@FreeBSD.org FreeBSD committer --c8JyeaiReRNoiMDS Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (FreeBSD) iD8DBQFDkiJVqRfpzJluFF4RAn9FAJoC9GIS0riMKZb15/V5ouUl3V0BCACgjh++ a4TXSeJM94K9pUB1gNFdEIU= =gowy -----END PGP SIGNATURE----- --c8JyeaiReRNoiMDS--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051203225517.GK960>