This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Warn when returning the address of a temporary (middle-end) v2
- From: Marc Glisse <marc dot glisse at inria dot fr>
- To: Alan Modra <amodra at gmail dot com>
- Cc: Jeff Law <law at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Date: Wed, 2 Jul 2014 14:41:49 +0200 (CEST)
- Subject: Re: Warn when returning the address of a temporary (middle-end) v2
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 02 dot 1406221930380 dot 20514 at stedding dot saclay dot inria dot fr> <alpine dot DEB dot 2 dot 10 dot 1406291111050 dot 2096 at laptop-mg dot saclay dot inria dot fr> <53B1D0C5 dot 30901 at redhat dot com> <alpine dot DEB dot 2 dot 10 dot 1406302319090 dot 2048 at laptop-mg dot saclay dot inria dot fr> <20140702121904 dot GI4471 at bubble dot grove dot modra dot org>
On Wed, 2 Jul 2014, 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.
Note that the patch not only warns, it also returns NULL instead of the
pointer (at least the current version does), so it really needs to be
certain.
The ABIs explicitly state that the parameter save
area is not preserved over function calls.
Good, that makes me much more confident, thanks.
Also note that anything left in a caller allocated parameter save area
will potentially be trashed by arguments written for the next call.
--
Marc Glisse