aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2003-05-03 00:35:06 +0000
committerTom Tromey <tromey@gcc.gnu.org>2003-05-03 00:35:06 +0000
commitfcc8cecb81575ae3bd8886fe8157a037a7716c21 (patch)
tree838c4b462be1965ca1ec669a6e685e99e218174a /gcc
parenta6f1f688a61cfe868d78ffddd633bc9aa120ab1d (diff)
downloadgcc-fcc8cecb81575ae3bd8886fe8157a037a7716c21.zip
gcc-fcc8cecb81575ae3bd8886fe8157a037a7716c21.tar.gz
gcc-fcc8cecb81575ae3bd8886fe8157a037a7716c21.tar.bz2
re PR java/10459 (ICE with certain expressions as 3rd clause of for loop)
PR java/10459: * parse.y (finish_for_loop): Do nothing if update expression is a EXPR_WFL_NODE wrapping nothing. (java_complete_lhs) <COMPOUND_EXPR>: Likewise. From-SVN: r66411
Diffstat (limited to 'gcc')
-rw-r--r--gcc/java/ChangeLog7
-rw-r--r--gcc/java/parse.y21
2 files changed, 21 insertions, 7 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 546e679..02e5075 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,10 @@
+2003-05-01 Tom Tromey <tromey@redhat.com>
+
+ PR java/10459:
+ * parse.y (finish_for_loop): Do nothing if update expression is a
+ EXPR_WFL_NODE wrapping nothing.
+ (java_complete_lhs) <COMPOUND_EXPR>: Likewise.
+
2003-05-02 Nathan Sidwell <nathan@codesourcery.com>
* lex.h (input_lineno): Remove declaration.
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index c35d4e5..49fbc91 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -11771,7 +11771,9 @@ java_complete_lhs (tree node)
nn = wfl_op2;
if (TREE_CODE (nn) == EXPR_WITH_FILE_LOCATION)
nn = EXPR_WFL_NODE (nn);
- if (TREE_CODE (nn) != EXIT_EXPR)
+ /* NN can be NULL_TREE exactly when UPDATE is, in
+ finish_for_loop. */
+ if (nn != NULL_TREE && TREE_CODE (nn) != EXIT_EXPR)
{
SET_WFL_OPERATOR (wfl_operator, node, wfl_op2);
if (SUPPRESS_UNREACHABLE_ERROR (nn))
@@ -14928,12 +14930,17 @@ finish_for_loop (int location, tree condition, tree update, tree body)
tree up2 = update;
if (TREE_CODE (up2) == EXPR_WITH_FILE_LOCATION)
up2 = EXPR_WFL_NODE (up2);
- /* Try to detect constraint violations. These would be
- programming errors somewhere. */
- if (! IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (up2)))
- || TREE_CODE (up2) == LOOP_EXPR)
- abort ();
- SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
+ /* It is possible for the update expression to be an
+ EXPR_WFL_NODE wrapping nothing. */
+ if (up2 != NULL_TREE && up2 != empty_stmt_node)
+ {
+ /* Try to detect constraint violations. These would be
+ programming errors somewhere. */
+ if (! IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (up2)))
+ || TREE_CODE (up2) == LOOP_EXPR)
+ abort ();
+ SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
+ }
}
LOOP_EXPR_BODY_UPDATE_BLOCK (LOOP_EXPR_BODY (loop)) = update;
return loop;