C++ PATCH: Disallow floating-point literals in integral-constant expressions

Mark Mitchell mark@codesourcery.com
Tue Feb 1 06:08:00 GMT 2005


Ranjit Mathew wrote:
> Mark Mitchell wrote:
> 
>>The standard says that floating-point literals are only allowed in
>>integral constant expressions if they are immediately cast to an
>>integral or enumeration type.  When I implemented checks for integral
>>constant-expressions, I failed to check this case.  Remedied with the
>>attached patch.
>>
>>The standard library fell afound of this rule in std_limits.h; that's
>>now fixed too.
>>
>>Tested on x86_64-unknown-linux-gnu, applied on the mainline.
> 
> 
> This seems to break libjava on i686-pc-linux-gnu:
> 
> ./java/util/Hashtable.h:53: error: floating-point literal cannot appear in a con
> stant-expression
> 
> The relevant line from
> $BUILD_DIR/i686-pc-linux-gnu/libjava/java/util/Hashtable.h is:
> 
>   static const jfloat DEFAULT_LOAD_FACTOR = 0x1.800000p-1f;

Ugh.  That's invalid C++.

However, we can't have a broken Java compiler.

I'll take a quick look at fixing gjavah, and, failing that, disable the 
new error temporarily.

-- 
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304



More information about the Libstdc++ mailing list