https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99859
--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #4) > So, on the #c3 testcase, if I put a breakpoint before and after > fold_nondependent_expr in finish_static_assert and temporarily in between > those two breakpoints put a breakpoint on cxx_eval_call_expression and > cxx_eval_increment_expression, it is clear that while > cxx_eval_call_expression is called on > ... > intrusive_ptr<Foo>::~intrusive_ptr (&D.2255); > Foo::dec (NON_LVALUE_EXPR <((struct intrusive_ptr *) this)->ptr>); > intrusive_ptr<Foo>::~intrusive_ptr (&a); > Foo::dec (NON_LVALUE_EXPR <((struct intrusive_ptr *) this)->ptr>); Shouldn't cxx_bind_parameters_in_call have noticed that the argument to these Foo::dec calls is non-constant, which would inhibit their caching?