This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Fix for PR/13358
- From: Jack Lloyd <lloyd at randombit dot net>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 23 Jan 2004 11:22:06 -0500 (EST)
- Subject: Fix for PR/13358
I would really like to see this PR fixed before 3.4, it is (AFAIK) a
one-line change, in gcc/c-lex.c::interpret_integer:
if (itk > itk_unsigned_long
&& (flags & CPP_N_WIDTH) != CPP_N_LARGE
&& ! in_system_header && ! flag_isoc99)
to:
if (warn_long_long && itk > itk_unsigned_long
&& (flags & CPP_N_WIDTH) != CPP_N_LARGE
&& ! in_system_header && ! flag_isoc99)
Background: GCC 3.3/3.4 rejects long long constants in C++ that don't have
a LL/ULL suffix. Earlier GCCs (and most other compilers) silently accept
them. Constants of this type are legal in C99. Given that long long doesn't
exist in ISO C++, I would think the most logical way for them to be treated
in C++ is the same as C99. The Bugzilla page has more discussion on this.
The only (intended) effect is that if -Wno-long-long is used, then long
long constants without a suffix will be accepted by the C/C++ compiler (in
3.3/current 3.4, C will warn and C++ will error). Since -Wlong-long is the
default this should not affect anyone except users of -Wno-long-long (who
presumably know what they're getting when they use it).
Does this seem like a workable fix? And if so, can someone make the change?
Thanks,
Jack