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

Reply via email to