OSDN Git Service

2002-08-28 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Sep 2002 13:24:41 +0000 (13:24 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Sep 2002 13:24:41 +0000 (13:24 +0000)
* verify.c (verify_jvm_instructions): Allow exception handler
inside code that is being protected, but generate a warning.
* except.c (link_handler): Initialize `expanded' in new eh_range.
(binding_depth, is_class_level, current_pc): Declare extern.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56842 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 8195d1f..2eb6a9d 100644 (file)
@@ -1,3 +1,10 @@
+2002-08-28  Andrew Haley  <aph@redhat.com>
+
+       * verify.c (verify_jvm_instructions): Allow exception handler
+       inside code that is being protected, but generate a warning.
+       * except.c (link_handler): Initialize `expanded' in new eh_range.
+       (binding_depth, is_class_level, current_pc): Declare extern.
+
 2002-09-01  Mark Wielaard <mark@klomp.org>
 
        * gcj.texi: Add chapter about system properties.
index ef773e4..614587d 100644 (file)
@@ -61,9 +61,9 @@ static struct eh_range *cache_next_child;
 struct eh_range whole_range;
 
 #if defined(DEBUG_JAVA_BINDING_LEVELS)
-int binding_depth;
-int is_class_level;
-int current_pc;
+extern int binding_depth;
+extern int is_class_level;
+extern int current_pc;
 extern void indent ();
 
 #endif
@@ -172,6 +172,7 @@ link_handler (range, outer)
       h->handlers = build_tree_list (TREE_PURPOSE (range->handlers),
                                     TREE_VALUE (range->handlers));
       h->next_sibling = NULL;
+      h->expanded = 0;
       /* Restart both from the top to avoid having to make this
         function smart about reentrancy.  */
       link_handler (h, &whole_range);
index b81927e..c3b3b98 100644 (file)
@@ -471,7 +471,6 @@ verify_jvm_instructions (jcf, byte_ops, length)
       if (start_pc < 0 || start_pc >= length
          || end_pc < 0 || end_pc > length || start_pc >= end_pc
          || handler_pc < 0 || handler_pc >= length
-         || (handler_pc >= start_pc && handler_pc < end_pc)
          || ! (instruction_bits [start_pc] & BCODE_INSTRUCTION_START)
          || (end_pc < length &&
             ! (instruction_bits [end_pc] & BCODE_INSTRUCTION_START))
@@ -482,6 +481,9 @@ verify_jvm_instructions (jcf, byte_ops, length)
          return 0;
        }
 
+      if  (handler_pc >= start_pc && handler_pc < end_pc)
+       warning ("exception handler inside code that is being protected");
+
       add_handler (start_pc, end_pc,
                   lookup_label (handler_pc),
                   catch_type == 0 ? NULL_TREE