Zdenek Dvorak wrote:
> Hello,
> 
> what exactly is the semantics of the cleanup for TARGET_EXPR?
> Documentation says:
> 
> 
>>Often, a @code{TARGET_EXPR} occurs on the right-hand side of an
>>assignment, or as the second operand to a comma-expression which is
>>itself the right-hand side of an assignment, etc.  In this case, we say
>>that the @code{TARGET_EXPR} is ``normal''; otherwise, we say it is
>>``orphaned''.
> 
> ...
> 
>>If this expression is orphaned, then this expression must be executed
>>when the statement containing this expression is complete.
> 
> 
> What does "etc." in the definition of ``normal'' mean?  Is say target_expr in
> 
> a = b ? TARGET_EXPR : something;
> 
> orphaned?  If TARGET_EXPR is not orphaned, is it allowed to run its cleanup?

That should be considered a "normal" use, just like "a = TARGET_EXPR".

In the abstract, the best thing might be for there to be a TARGET_EXPR
around the entire COND_EXPR, but IIRC, the way it works is that there
will be a TARGET_EXPR for each arm of the conditional.  Here, the
cleanups should not be run.  However, if it were just "b ? TARGET_EXPR :
something", then the cleanups should be run; that would be an orphaned use.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713

Reply via email to