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.

umm... OK.  Could you please provide an example (that could perhaps also
be added to documentation) of how TARGET_EXPRs are used, that would
explain the rationale behind this semantics?

Zdenek

Reply via email to