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;
};