https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80290

--- Comment #15 from Jason Merrill <jason at gcc dot gnu.org> ---
Adding a timevar to cxx_eval_outermost_constant_expr shows minimal time spent
in constexpr evaluation; it also doesn't show up in -fmem-report.  So constexpr
isn't the problem.

It seems to me that the problem is that we added a bunch of constructor
template overloads, and made all of them rely on doing further overload
resolution in order to evaluate the SFINAE condition, and that's a lot more
work for the compiler.  And then there are a few places, notably
push_tinst_level, that allocate memory that isn't freed until the next GC, so
in this case it keeps building up.

We ought to be able to be smarter about caching previous overload resolution
results, but that would be new machinery that doesn't seem suitable for stage
4.

I'll keep poking.

Reply via email to