Reduce accumulated garbage in constexpr evaluation.
authorJason Merrill <jason@redhat.com>
Tue, 4 Jun 2019 14:47:40 +0000 (10:47 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 4 Jun 2019 14:47:40 +0000 (10:47 -0400)
commitecdcd56094cadc7bd3c18a0edd19f00d670e0d9b
tree6c44b508c28bc1e7f1f7141324f204af83dcb7f2
parentc790e3ece633d7e566f15b4df389ad8aefd9b78a
Reduce accumulated garbage in constexpr evaluation.

We want to evaluate the arguments to a call before looking into the cache so
that we have constant values, but if we then find the call in the cache we
end up with a TREE_LIST that we don't end up using; in highly recursive
constexpr evaluation this ends up being a large proportion of the garbage
generated.

The cxx_eval_increment_expression hunk is less important, but it's an easy
tweak; we only use the MODIFY_EXPR to evaluate it, so after that it's
garbage.

* constexpr.c (cxx_eval_call_expression): ggc_free any bindings we
don't save.
(cxx_eval_increment_expression): ggc_free the MODIFY_EXPR after
evaluating it.

From-SVN: r271909
gcc/cp/ChangeLog
gcc/cp/constexpr.c