This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ PATCH: Disallow floating-point literals in integral-constantexpressions


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;

That does look like a floating-point literal, doesn't it?

(jfloat is __java_float and is defined to be a REAL_TYPE
by g++.)

The above was generated by gjavah from the corresponding
Java code in java.util.Hashtable:

  private static final float DEFAULT_LOAD_FACTOR = 0.75f;

Thanks,
Ranjit.

-- 
Ranjit Mathew      Email: rmathew AT gmail DOT com

Bangalore, INDIA.    Web: http://ranjitmathew.hostingzero.com/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]