On Fri, 14 Oct 2016, James Greenhalgh wrote: > +/* If the join of the implicit precision in which the target will compute > + floating-point values and the standard precision in which the target will > + compute values is not equal to the standard precision, then the target > + is either unpredictable, or is a broken configuration in which it claims > + standards compliance, but doesn't honor that. > + > + Effective predictability for __GCC_IEC_559 in flag_iso_mode, means that > + the implicit precision is not wider, or less predictable than the > + standard precision. > + > + Return TRUE if we have been asked to compile with > + -fexcess-precision=standard, and following the rules above we are able > + to guarantee the standards mode. */ > + > +static bool > +c_cpp_flt_eval_method_iec_559 (void) > +{ > + enum flt_eval_method implicit > + = targetm.c.excess_precision (EXCESS_PRECISION_TYPE_IMPLICIT); > + enum flt_eval_method standard > + = targetm.c.excess_precision (EXCESS_PRECISION_TYPE_STANDARD); > + > + return (excess_precision_mode_join (implicit, standard) == standard > + && flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD); > +} > + > /* Return the value for __GCC_IEC_559. */ > static int > cpp_iec_559_value (void) > @@ -775,11 +801,12 @@ cpp_iec_559_value (void) > applies to unpredictable contraction. For C++, and outside > strict conformance mode, do not consider these options to mean > lack of IEEE 754 support. */ > + > if (flag_iso > && !c_dialect_cxx () > - && TARGET_FLT_EVAL_METHOD != 0 > - && flag_excess_precision_cmdline != EXCESS_PRECISION_STANDARD) > + && !c_cpp_flt_eval_method_iec_559 ()) > ret = 0;
I'm not convinced by the logic you have here. At least, it seems different from what we have at present, where -std=c11 -fexcess-precision=fast is not considered unpredictable if the target doesn't have any implicit excess precision. That is: I think the right question is whether the combination (front-end excess precision, implicit back-end excess precision) does the same thing as just front-end excess precision, regardless of the -fexcess-precision= option. -- Joseph S. Myers jos...@codesourcery.com