* ir.texi: Improve documentation for TARGET_EXPR.
authorMark Mitchell <mark@codesourcery.com>
Tue, 28 Sep 1999 07:40:15 +0000 (07:40 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 28 Sep 1999 07:40:15 +0000 (07:40 +0000)
From-SVN: r29688

gcc/cp/ChangeLog
gcc/cp/ir.texi

index bd30005..783057c 100644 (file)
@@ -1,3 +1,7 @@
+1999-09-28  Mark Mitchell  <mark@codesourcery.com>
+
+       * ir.texi: Improve documentation for TARGET_EXPR.
+
 1999-09-27  Nathan Sidwell  <nathan@acm.org>
 
        Augment stringification of trees.
index 32a0bf3..4e5396e 100644 (file)
@@ -1624,7 +1624,7 @@ These nodes represent @code{throw} expressions.  The single operand is
 an expression for the code that should be executed to throw the
 exception.  However, there is one implicit action not represented in
 that expression; namely the call to @code{__throw}.  This function takes
-no arguments.  If @code{setjmp}/@code{longjmp} exceptiosn are used, the
+no arguments.  If @code{setjmp}/@code{longjmp} exceptions are used, the
 function @code{__sjthrow} is called instead.  The normal G++ back-end
 uses the function @code{emit_throw} to generate this code; you can
 examine this function to see what needs to be done.
@@ -1811,17 +1811,23 @@ is a @code{VAR_DECL} for the temporary variable.  The second operand is
 the initializer for the temporary.  The initializer is evaluated, and
 copied (bitwise) into the temporary.
 
+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''.  For a normal @code{TARGET_EXPR} the temporary variable
+should be treated as an alias for the left-hand side of the assignment,
+rather than as a new temporary variable.
+
 The third operand to the @code{TARGET_EXPR}, if present, is a
 cleanup-expression (i.e., destructor call) for the temporary.  If this
-expression is not copied into some other location (i.e., if it is not
-the right-hand side of an assignment, or the second operand to a
-comma-expression which is itself the right-hand side of an assignment,
-etc.), then this expression must be executed when the statement
-containing this expression is complete.  These cleanups must always be
-executed in the order opposite to that in which they were encountered.
-Note that if a temporary is created on one branch of a conditional
-operator (i.e., in the second or third operand to a @code{COND_EXPR}),
-the cleanup must be run only if that branch is actually executed.
+expression is orphaned, then this expression must be executed when the
+statement containing this expression is complete.  These cleanups must
+always be executed in the order opposite to that in which they were
+encountered.  Note that if a temporary is created on one branch of a
+conditional operator (i.e., in the second or third operand to a
+@code{COND_EXPR}), the cleanup must be run only if that branch is
+actually executed.
 
 See @code{STMT_IS_FULL_EXPR_P} for more information about running these
 cleanups.