https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70594
--- Comment #14 from Nathan Sidwell <nathan at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #13) > If you remove the deletableness, then I'd say it is really important to > empty the whole freelist at least at the end of parsing, so that when GIMPLE > optimizations and RTL optimizations run memory is not occupied by those > anymore. Makes sense. > And perhaps instead of GC use some LRU eviction from the freelist if there > are too many constexpr functions on the freelist (but it certainly shouldn't > be dependent on stuff like free memory or GC etc.), so that builds are > reproduceable. There could be some --param with some sane defaults on how > many functions in freelist can be kept. Good idea. I guess the right place is in cxx_eval_call_expression, when we find we're inserting a new entry we should zap its current contents if it is 'too large'. To be specific, I mean changing constexpr_call_table, which holds call results. Not changing the fundef_copies_table, which holds lists of copied functions and can remain GC-deletable.