https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115639
--- Comment #7 from Patrick Palka <ppalka at gcc dot gnu.org> --- (In reply to Jason Merrill from comment #6) > (In reply to Patrick Palka from comment #5) > > ... and in particular if we have a cached mce_unknown call result it means > > the call isn't sensitive to mce, and so we can reuse later when evaluating > > the call with mce_true or mce_false? > > Good point, if the first constexpr_call_table->find_slot doesn't find a > value we could try again with mce_unknown. That should hopefully help with PR113835 as well. And it might be convenient (and ultimately more space efficient) to store all three mce_value results in a single constexpr_call entry, i.e. change the constexpr_call layout to @@ -1127,12 +1127,10 @@ struct GTY((for_user)) constexpr_call { error_mark_node means that the evaluation was erroneous or otherwise uncacheable (e.g. because it depends on the caller). Otherwise, the actual value of the call. */ - tree result; + tree result[3]; /* The hash of this call; we remember it here to avoid having to recalculate it when expanding the hash table. */ hashval_t hash; - /* The value of constexpr_ctx::manifestly_const_eval. */ - enum mce_value manifestly_const_eval; };