Hi,

On Tue, 26 Jun 2012, Jason Merrill wrote:

> > (the gimplifier code should be in Frontend code that lowers to GENERIC 
> > really and the WITH_CLEANUP_EXPR code should be C++ frontend specific 
> > ...).
> 
> TARGET_EXPR has been a back-end code since the dawn of GCC version 
> control; if it's still only used by the C++ front end I guess it could 
> move to cp-tree.def, but we can't really lower it until gimplification 
> time because we need to strip away enclosing COMPOUND_EXPRs and such so 
> we can see that it's on the RHS of an initialization and optimize away 
> the temporary in that case. And now that GIMPLE isn't a subset of 
> GENERIC, we can't just use the gimplifier at genericization time.  And 
> I'd rather not duplicate the entire gimplifier in the front end.

I agree with Jason.  TARGET_EXPR and CLEANUP_POINT_EXPR might currently be 
used only for C++, but I think they are sensible general constructs to be 
supported by the gimplifier.

But I also think that the option to disable stack slot sharing should be 
moved to cfgexpand to trigger non-sharing of everything, not just these 
cleanup temporaries.  After all using the (c++)temporary after expression 
end is a source bug that the option is supposed to work around, just like 
this is:

  char *p; { char str[50]; p = str; } use(p);

So, IMO the option should also work around this source bug.  We had at 
least one example of that in our own code base.


Ciao,
Michael.

Reply via email to