GCC 4.0 Status Report (2005-03-24)
Jason Merrill
jason@redhat.com
Tue Mar 29 08:06:00 GMT 2005
On Thu, 24 Mar 2005 11:29:09 -0800, Mark Mitchell <mark@codesourcery.com> 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
More information about the Gcc
mailing list