From: Roger Sayle Date: Fri, 18 Oct 2002 03:29:17 +0000 (+0000) Subject: * doc/c-tree.texi: Update description of COND_EXPR tree nodes. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b35bba35d36aa1faa9a2354d31b8bdb23b6ea94;p=gcc.git * doc/c-tree.texi: Update description of COND_EXPR tree nodes. From-SVN: r58268 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ec9c6f1ebb..9d0de30254e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2002-10-17 Roger Sayle + + * doc/c-tree.texi: Update description of COND_EXPR tree nodes. + 2002-10-17 Geoffrey Keating * config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Allow arbitrary modes diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi index 9ca94806c40..0b9f4d69d75 100644 --- a/gcc/doc/c-tree.texi +++ b/gcc/doc/c-tree.texi @@ -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