Skip site navigation (1)Skip section navigation (2)
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>