https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78509
James Greenhalgh <jgreenhalgh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2016-11-24 Assignee|unassigned at gcc dot gnu.org |jgreenhalgh at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #4 from James Greenhalgh <jgreenhalgh at gcc dot gnu.org> --- Well, certainly this comment and assert in tree.c: /* The target should not ask for unpredictable float evaluation (though it might advertise that implicitly the evaluation is unpredictable, but we don't care about that here, it will have been reported elsewhere). If it does ask for unpredictable evaluation, we have nothing to do here. */ gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE); Suggest that the implementation I've put in for TARGET_C_EXCESS_PRECISION on i386 is wrong (or the assert needs to be weakened). static enum flt_eval_method ix86_excess_precision (enum excess_precision_type type) { switch (type) { case EXCESS_PRECISION_TYPE_FAST: /* The fastest type to promote to will always be the native type, whether that occurs with implicit excess precision or otherwise. */ return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; case EXCESS_PRECISION_TYPE_STANDARD: case EXCESS_PRECISION_TYPE_IMPLICIT: /* Otherwise, the excess precision we want when we are in a standards compliant mode, and the implicit precision we provide can be identical. */ if (!TARGET_80387) return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; else if (TARGET_MIX_SSE_I387) return FLT_EVAL_METHOD_UNPREDICTABLE; else if (!TARGET_SSE_MATH) return FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE; else if (TARGET_SSE2) return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; else return FLT_EVAL_METHOD_UNPREDICTABLE; default: gcc_unreachable (); } return FLT_EVAL_METHOD_UNPREDICTABLE; } I think the right fix is probably to return FLT_METHOD_PROMOTE_TO_FLOAT for EXCESS_PRECISION_TYPE_STANDARD, but I'll need to think about that. Sorry again for the break, by inspection it is obvious how you hit that assert.