On Thu, 24 Mar 2005 11:29:09 -0800, Mark Mitchell <[EMAIL PROTECTED]> wrote:

> 19317 C++ problems with temporary return values
>
>   This patch breaks Qt builds.  One of my patches is implicated, but I
>   believe that the consensus is that this is an NRV bug.  Jason made
>   several attempts at fixing this.  Does anyone know what the current
>   status is?

Basically, the problem is that the return slot optimization in expand_call
is incompatible with the NRVO; if the callee shares the return slot with a
variable, the caller can't share it with an object which escapes.
expand_call has no way of checking whether "target" escapes, so I think we
probably just need to disable the optimization there.

I was trying to implement the optimization at the tree level by making the
return slot argument explicit in the GIMPLE form, with
CALL_EXPR_HAS_RETURN_SLOT.  This caused problems with some code that didn't
know to check that flag...which led me to think that if it requires a lot
of special handling, perhaps the flag is the wrong way to make the return
slot explicit.  But I don't have a better idea atm.

Jason

Reply via email to