[multiple changes]
authorAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Mon, 6 Dec 1999 19:56:58 +0000 (11:56 -0800)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Mon, 6 Dec 1999 19:56:58 +0000 (11:56 -0800)
Tue Nov 30 12:36:15 1999  Anthony Green  <green@cygnus.com>

        * verify.c (verify_jvm_instructions): Create new return label
        chain if non existant (don't rely on the verified state of the jsr
        target.)

Tue Nov 23 17:29:40 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>

        * verify.c (merge_type_state): Non verified subroutines being
        considered more than once to trigger passive type merge.

From-SVN: r30811

gcc/java/ChangeLog
gcc/java/verify.c

index 62a6f8828cead21eb0f1b3e16d286e5f2b763248..bf90f870a310ab0f00c1fea76b4fcce3ff5a170f 100644 (file)
@@ -3,6 +3,12 @@ Wed Dec  1 04:25:06 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
         * except.c (expand_end_java_handler): Call
         expand_resume_after_catch and end_catch_handler.
 
+Tue Nov 30 12:36:15 1999  Anthony Green  <green@cygnus.com>
+
+        * verify.c (verify_jvm_instructions): Create new return label
+        chain if non existant (don't rely on the verified state of the jsr
+        target.)
+
 Tue Nov 30 12:28:34 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
         * jcf-write.c (generate_byecode_insns): Fixed indentation for
@@ -23,6 +29,11 @@ Wed Nov 24 17:33:26 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * except.c (emit_handlers): Zero catch_clauses after emitting them.
 
+Tue Nov 23 17:29:40 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+        * verify.c (merge_type_state): Non verified subroutines being
+        considered more than once to trigger passive type merge.
+
 Tue Nov 23 10:55:18 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * parse.y (catch_clause_parameter:): Still set `$$' to NULL_TREE
index 41ad823cb462e95f4bab29a005da59056fe23f15..d17a184bf400d87a6f10aa951d99d4833846c638 100644 (file)
@@ -216,10 +216,13 @@ merge_type_state (label)
   int cur_length = stack_pointer + nlocals;
   tree vec = LABEL_TYPE_STATE (label);
   tree return_map;
-  if (vec == NULL_TREE)
+  if (vec == NULL_TREE || !LABEL_VERIFIED (label))
     {
-      vec = make_tree_vec (cur_length);
-      LABEL_TYPE_STATE (label) = vec;
+      if (!vec)
+       {
+         vec = make_tree_vec (cur_length);
+         LABEL_TYPE_STATE (label) = vec;
+       }
       while (--cur_length >= 0)
        TREE_VEC_ELT (vec, cur_length) = type_map [cur_length];
       return 1;
@@ -1153,9 +1156,10 @@ verify_jvm_instructions (jcf, byte_ops, length)
            tree target = lookup_label (oldpc + IMMEDIATE_s2);
            tree return_label = lookup_label (PC);
            push_type (return_address_type_node);
-           if (! LABEL_VERIFIED (target))
+           /* The return label chain will be null if this is the first
+              time we've seen this jsr target.  */
+            if (LABEL_RETURN_LABEL (target) == NULL_TREE)
              {
-               /* first time seen */
                tree return_type_map;
                int nlocals = DECL_MAX_LOCALS (current_function_decl);
                index = nlocals + DECL_MAX_STACK (current_function_decl);