* doc/c-tree.texi: Update description of COND_EXPR tree nodes.
authorRoger Sayle <roger@eyesopen.com>
Fri, 18 Oct 2002 03:29:17 +0000 (03:29 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Fri, 18 Oct 2002 03:29:17 +0000 (03:29 +0000)
From-SVN: r58268

gcc/ChangeLog
gcc/doc/c-tree.texi

index 5ec9c6f1ebb54f78b9720deb75e4f6b34c99b8b3..9d0de30254e593ee439d99db426bace9ee82e24b 100644 (file)
@@ -1,3 +1,7 @@
+2002-10-17  Roger Sayle  <roger@eyesopen.com>
+
+       * doc/c-tree.texi: Update description of COND_EXPR tree nodes.
+
 2002-10-17  Geoffrey Keating  <geoffk@apple.com>
 
        * config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Allow arbitrary modes
index 9ca94806c40ba9f3e6e8ff408b99b8043308164d..0b9f4d69d75e345ac385df7cc08e8d96197322ef 100644 (file)
@@ -2127,25 +2127,21 @@ These nodes represent @code{?:} expressions.  The first operand
 is of boolean or integral type.  If it evaluates to a nonzero value,
 the second operand should be evaluated, and returned as the value of the
 expression.  Otherwise, the third operand is evaluated, and returned as
-the value of the expression.  As a GNU extension, the middle operand of
-the @code{?:} operator may be omitted in the source, like this:
-
-@example
-x ? : 3
-@end example
-@noindent
-which is equivalent to
-
-@example
-x ? x : 3
-@end example
-
-@noindent
-assuming that @code{x} is an expression without side-effects.  However,
-in the case that the first operation causes side effects, the
-side-effects occur only once.  Consumers of the internal representation
-do not need to worry about this oddity; the second operand will be
-always be present in the internal representation.
+the value of the expression.
+
+The second operand must have the same type as the entire expression,
+unless it unconditionally throws an exception or calls a noreturn
+function, in which case it should have void type.  The same constraints
+apply to the third operand.  This allows array bounds checks to be
+represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}.
+
+As a GNU extension, the C language front-ends allow the second
+operand of the @code{?:} operator may be omitted in the source.
+For example, @code{x ? : 3} is equivalent to @code{x ? x : 3},
+assuming that @code{x} is an expression without side-effects.
+In the tree representation, however, the second operand is always
+present, possibly protected by @code{SAVE_EXPR} if the first
+argument does cause side-effects.
 
 @item CALL_EXPR
 These nodes are used to represent calls to functions, including