https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119014
--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
2 is of course the right value for -fexcess-precision=standard -m32 on x86 (for
-fexcess-precision=fast arguably it should be IMHO -1).
Anyway, if you don't believe -fexcess-precision= affects the FLT_EVAL_METHOD
values, just look at the source:
/* Return the value that should be set for FLT_EVAL_METHOD in the
context of ISO/IEC TS 18861-3.
This relates to the effective excess precision seen by the user,
which is the join point of the precision the target requests for
-fexcess-precision={standard,fast,16} and the implicit excess precision
the target uses. */
static enum flt_eval_method
c_ts18661_flt_eval_method (void)
{
enum flt_eval_method implicit
= targetm.c.excess_precision (EXCESS_PRECISION_TYPE_IMPLICIT);
enum excess_precision_type flag_type
= (flag_excess_precision == EXCESS_PRECISION_STANDARD
? EXCESS_PRECISION_TYPE_STANDARD
: (flag_excess_precision == EXCESS_PRECISION_FLOAT16
? EXCESS_PRECISION_TYPE_FLOAT16
: EXCESS_PRECISION_TYPE_FAST));
enum flt_eval_method requested
= targetm.c.excess_precision (flag_type);
return excess_precision_mode_join (implicit, requested);
}
/* As c_cpp_ts18661_flt_eval_method, but clamps the expected values to
those that were permitted by C11. That is to say, eliminates
FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16. */
static enum flt_eval_method
c_c11_flt_eval_method (void)
{
return excess_precision_mode_join (c_ts18661_flt_eval_method (),
FLT_EVAL_METHOD_PROMOTE_TO_FLOAT);
}
/* Return the value that should be set for FLT_EVAL_METHOD.
MAYBE_C11_ONLY_P is TRUE if we should check
FLAG_PERMITTED_EVAL_METHODS as to whether we should limit the possible
values we can return to those from C99/C11, and FALSE otherwise.
See the comments on c_ts18661_flt_eval_method for what value we choose
to set here. */
int
c_flt_eval_method (bool maybe_c11_only_p)
{
if (maybe_c11_only_p
&& flag_permitted_flt_eval_methods
== PERMITTED_FLT_EVAL_METHODS_C11)
return c_c11_flt_eval_method ();
else
return c_ts18661_flt_eval_method ();
}
..
builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
c_flt_eval_method (true));
builtin_define_with_int_value ("__FLT_EVAL_METHOD_TS_18661_3__",
c_flt_eval_method (false));