jcf-write.c (generate_bytecode_insns): TRY_FINALLY_EXPR...
authorAlexandre Petit-Bianco <apbianco@cygnus.com>
Wed, 22 Mar 2000 22:48:04 +0000 (22:48 +0000)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Wed, 22 Mar 2000 22:48:04 +0000 (14:48 -0800)
Mon Mar 20 08:58:51 2000  Alexandre Petit-Bianco  <apbianco@cygnus.com>

* jcf-write.c (generate_bytecode_insns): TRY_FINALLY_EXPR:
properly initialize `finished_label.' Don't emit gotos for empty
try statements.

(Minor fix: http://gcc.gnu.org/ml/gcc-patches/2000-03/msg00762.html)

From-SVN: r32690

gcc/java/ChangeLog
gcc/java/jcf-write.c

index f96e28713f2d4b6385eb7da4a9b2c7a673361404..6a2a09b22c08a5072ee933ab51d74c75eaca21b6 100644 (file)
@@ -1,3 +1,9 @@
+Mon Mar 20 08:58:51 2000  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * jcf-write.c (generate_bytecode_insns): TRY_FINALLY_EXPR:
+       properly initialize `finished_label.' Don't emit gotos for empty
+       try statements.
+
 2000-03-19  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
 
        * except.c (emit_handlers): Clear catch_clauses_last.
index 4eccf254c57d3a4016e592a56acd7ab2eb6ef4c8..0b510a0aa23649189bdfd473400bf28d139a0176 100644 (file)
@@ -2317,8 +2317,9 @@ generate_bytecode_insns (exp, target, state)
        tree finally = TREE_OPERAND (exp, 1);
        tree return_link, exception_decl;
 
-       finished_label = finally_label = start_label = NULL;
+       finally_label = start_label = NULL;
        return_link = exception_decl = NULL_TREE;
+       finished_label = gen_jcf_label (state);
 
        /* If the finally clause happens to be empty, set a flag so we
            remember to just skip it. */
@@ -2333,7 +2334,6 @@ generate_bytecode_insns (exp, target, state)
            exception_type = build_pointer_type (throwable_type_node);
            exception_decl = build_decl (VAR_DECL, NULL_TREE, exception_type);
 
-           finished_label = gen_jcf_label (state);
            finally_label = gen_jcf_label (state);
            start_label = get_jcf_label_here (state);
            finally_label->pc = PENDING_CLEANUP_PC;
@@ -2352,7 +2352,8 @@ generate_bytecode_insns (exp, target, state)
            emit_jsr (finally_label, state);
          }
 
-       if (CAN_COMPLETE_NORMALLY (try_block))
+       if (CAN_COMPLETE_NORMALLY (try_block)
+           && BLOCK_EXPR_BODY (try_block) != empty_stmt_node)
          emit_goto (finished_label, state);
 
        /* Handle exceptions. */