On 07/02/14 06:19, Alan Modra wrote:
On Mon, Jun 30, 2014 at 11:37:50PM +0200, Marc Glisse wrote:
On Mon, 30 Jun 2014, Jeff Law wrote:
On 06/29/14 03:22, Marc Glisse wrote:
After looking at PR 61597, I updated the 2 conditions to:
+ if ((TREE_CODE (valbase) == VAR_DECL
+ && !is_global_var (valbase))
+ || TREE_CODE (valbase) == PARM_DECL)
a PARM_DECL is a local variable and returning its address is wrong,
isn't it?
Right. It can live in either a caller or callee allocated slot.
The "caller" case scares me a bit. Is it really wrong to return the
address in that case? The slot still exists after returning if the
caller is responsible for it.
At least on powerpc64, which uses a caller allocated parameter save
area, returning the address of something in the parameter save area
merits a warning. The ABIs explicitly state that the parameter save
area is not preserved over function calls.
Also note that anything left in a caller allocated parameter save area
will potentially be trashed by arguments written for the next call.
Similarly for the PA ABIs. If something returned the address of one of
those slots, we'd definitely want a warning.
I'd be amazed if that wasn't the case for every ABI with a caller
allocated parameter save-back area.
jeff