On 11/23/18 4:15 PM, Jakub Jelinek wrote:
Hi!

On the following testcase, the call to operator () is marked as
CALL_FROM_THUNK_P and therefore genericization ignores all subtrees thereof.
Unfortunately, one of the arguments is a move ctor call which is not itself
CALL_FROM_THUNK_P and thus we need to genericize its arguments, otherwise
we pass address of a temporary which holds a reference value instead of the
reference itself.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Or should CALL_FROM_THUNK_P not be set in this call (it is set in
maybe_add_lambda_conv_op and then copied over during tsubst*).

The call with CALL_FROM_THUNK_P set should be inside the thunk whose address we get when converting the lambda to a function pointer (on return from foo). Its arguments should just be the parms of that thunk, I don't know where this temporary is coming from.

Jason

Reply via email to