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