[Bug c++/70847] [6/7 Regression] exponential time in cp_fold for chained virtual function calls

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jun 3 12:53:00 GMT 2016


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

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note, the patch has been successfully bootstrapped/regtested on x86_64-linux
and i686-linux.

I don't think such shared trees should be occurring significantly that it would
matter.
But, if you want to handle those, your change makes no sense, because if
cp_fold returns something other than its argument unmodified, then the
subsequent subtree walking happens on the new tree, not the old one, but you
stop the walking of the subtrees the second time.

Another option would be to only special case SAVE_EXPR and TARGET_EXPR, use
*walk_subtrees = 0; for it if it is already in the cache.


More information about the Gcc-bugs mailing list