This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
preprocessor bug in gcc 2.95.2[.1]
- To: <gcc-bugs at gcc dot gnu dot org>
- Subject: preprocessor bug in gcc 2.95.2[.1]
- From: "Laurent Montaron" <lpm at runbox dot com>
- Date: Wed, 7 Mar 2001 23:18:39 -0800
- Cc: <lpm at us dot ibm dot com>,<lpm at pobox dot com>
- Reply-To: <meow at pobox dot com>
Interesting problem seen on on Intel 32-bit platforms such as cygwin32
or i386-*-svr4 with GCC 2.95.2 and 2.95.2.1 .
The preprocessor evaluates the expression "(~0UL) == (0xFFFFFFFFUL)" as
false, whereas it is true on IA-32, where "unsigned long int" is a
32-bit quantity.
As a result, the following piece of code (from /usr/include/string.h in
IBM DYNIX/ptx v4.6) doesn't preprocess properly on Intel platforms:
#if ((~0UL) == 0xffffffffUL)
typedef unsigned int size_t; /* ILP32 size_t */
#else
typedef unsigned long size_t; /* LP64 size_t */
#endif /* ((~0UL) == 0xffffffffUL) */
Amusingly, the GNU preprocessor evaluates "(~0UL) == (0xFFFFFFFFFFFFFFFFUL)"
as true, which doesn't make much sense to me.
--
Laurent P. Montaron sylvestre@world-company.com
Portland, Oregon 97229, USA, North America meow@pobox.com
Earth (G-"Sol" III), South-West Milky Way Le_Chat on IRC/IRCNet
Universe E45-A North, Continuum 28 CEDEX PGP key available