From owner-freebsd-current@FreeBSD.ORG Sat Dec 3 22:45:49 2005 Return-Path: X-Original-To: current@FreeBSD.org Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C2B0716A41F for ; Sat, 3 Dec 2005 22:45:49 +0000 (GMT) (envelope-from ru@ip.net.ua) Received: from tigra.ip.net.ua (tigra.ip.net.ua [82.193.96.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 661EE43D5A for ; Sat, 3 Dec 2005 22:45:47 +0000 (GMT) (envelope-from ru@ip.net.ua) Received: from localhost (rocky.ip.net.ua [82.193.96.2]) by tigra.ip.net.ua (8.12.11/8.12.11) with ESMTP id jB3MjkCG003274 for ; Sun, 4 Dec 2005 00:45:46 +0200 (EET) (envelope-from ru@ip.net.ua) Received: from tigra.ip.net.ua ([82.193.96.10]) by localhost (rocky.ipnet [82.193.96.2]) (amavisd-new, port 10024) with LMTP id 02977-02-3 for ; Sun, 4 Dec 2005 00:45:45 +0200 (EET) Received: from heffalump.ip.net.ua (heffalump.ip.net.ua [82.193.96.213]) by tigra.ip.net.ua (8.12.11/8.12.11) with ESMTP id jB3MjFm2003241 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 4 Dec 2005 00:45:16 +0200 (EET) (envelope-from ru@ip.net.ua) Received: (from ru@localhost) by heffalump.ip.net.ua (8.13.4/8.13.4) id jB3MjIgA072493 for current@FreeBSD.org; Sun, 4 Dec 2005 00:45:18 +0200 (EET) (envelope-from ru) Date: Sun, 4 Dec 2005 00:45:18 +0200 From: Ruslan Ermilov To: current@FreeBSD.org Message-ID: <20051203224518.GJ960@ip.net.ua> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="vbzKE9fGfpHIBC6T" Content-Disposition: inline User-Agent: Mutt/1.5.9i X-Virus-Scanned: by amavisd-new at ip.net.ua Cc: Subject: Beware of subtle bugs due to cpp(1) limitations! X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2005 22:45:49 -0000 --vbzKE9fGfpHIBC6T Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi there, cpp(1) only supports integer expressions, so the following #define FOO foo #if FOO =3D=3D 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 =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 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 =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 The season for more bugs of this type is declared open! :-) Cheers, --=20 Ruslan Ermilov ru@FreeBSD.org FreeBSD committer --vbzKE9fGfpHIBC6T Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (FreeBSD) iD8DBQFDkh/+qRfpzJluFF4RAsuQAJ409WxCpqOhYfOCaOtDp2mKX3a54wCeOj1A lcbvVVME7PjIrinGnefue0A= =suSU -----END PGP SIGNATURE----- --vbzKE9fGfpHIBC6T--