re PR java/10459 (ICE with certain expressions as 3rd clause of for loop)
authorTom Tromey <tromey@redhat.com>
Sat, 3 May 2003 00:35:06 +0000 (00:35 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Sat, 3 May 2003 00:35:06 +0000 (00:35 +0000)
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

gcc/java/ChangeLog
gcc/java/parse.y

index 546e6790522562f468fa6772005b74ee3d144df7..02e5075be53d06be31398adfdef5fc5a2caf6555 100644 (file)
@@ -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.
index c35d4e504aaa66bc7ad2549ee5d449b1e3efaaf7..49fbc9162c08fca3fb0066c46812977992bdef01 100644 (file)
@@ -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;