* lang-specs.h: Added %{I*}.
authorTom Tromey <tromey@cygnus.com>
Thu, 13 Jul 2000 18:25:37 +0000 (18:25 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 13 Jul 2000 18:25:37 +0000 (18:25 +0000)
From-SVN: r35018

gcc/java/ChangeLog
gcc/java/jcf-write.c
gcc/java/lang-specs.h

index 0edfafbceffeef38ee8a375b746df691909158f7..4857d0182195988dcfd039bc71f28219aca13698 100644 (file)
@@ -1,3 +1,7 @@
+2000-07-13  Tom Tromey  <tromey@cygnus.com>
+
+       * lang-specs.h: Added %{I*}.
+
 2000-07-13  Zack Weinberg  <zack@wolery.cumb.org>
 
        * lang-specs.h: Use the new named specs.  Remove unnecessary braces.
index 538c1a24f547da9381772d0399b335f84f245668..0ef29cab20b2a8ba8e9462b79580acad7c459944 100644 (file)
@@ -290,6 +290,7 @@ static struct jcf_block * get_jcf_label_here PARAMS ((struct jcf_partial *));
 static void put_linenumber PARAMS ((int, struct jcf_partial *));
 static void localvar_alloc PARAMS ((tree, struct jcf_partial *));
 static void localvar_free PARAMS ((tree, struct jcf_partial *));
+static void localvar_finish PARAMS ((tree, struct jcf_partial *));
 static int get_access_flags PARAMS ((tree));
 static void write_chunks PARAMS ((FILE *, struct chunk *));
 static int adjust_typed_op PARAMS ((tree, int));
@@ -644,6 +645,25 @@ localvar_free (decl, state)
     }
 }
 
+/* Like localvar_free, but leaves the variable allocated.  This lets
+   us avoid problems with inappropriate variable reuse in some
+   situations.  */
+static void
+localvar_finish (decl, state)
+     tree decl;     
+     struct jcf_partial *state;
+{
+  struct jcf_block *end_label = get_jcf_label_here (state);
+  int index = DECL_LOCAL_INDEX (decl);
+  register struct localvar_info **ptr = &localvar_buffer [index];
+  register struct localvar_info *info = *ptr;
+
+  info->end_label = end_label;
+
+  if (info->decl != decl)
+    abort ();
+}
+
 \f
 #define STACK_TARGET 1
 #define IGNORE_TARGET 2
@@ -2379,7 +2399,7 @@ generate_bytecode_insns (exp, target, state)
        RESERVE (1);
        OP1 (OPCODE_athrow);
        NOTE_POP (1);
-       localvar_free (exception_decl, state);
+       localvar_finish (exception_decl, state);
 
        /* The finally block.  First save return PC into return_link. */
        define_jcf_label (finally_label, state);
@@ -2388,7 +2408,7 @@ generate_bytecode_insns (exp, target, state)
 
        generate_bytecode_insns (finally, IGNORE_TARGET, state);
        maybe_wide (OPCODE_ret, DECL_LOCAL_INDEX (return_link), state);
-       localvar_free (return_link, state);
+       localvar_finish (return_link, state);
        define_jcf_label (finished_label, state);
       }
       break;
index c03301852dcd1cc682201179f556054a510aedf9..d912724dc30254394aaf15b75aa470fee5810cd4 100644 (file)
@@ -31,6 +31,6 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
   {".jar",    "@java" },
   {"@java",
    "%{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
-    %{!E:jc1 %i %(cc1_options) %{+e*} %{MD} %{MMD} %{M} %{MM}\
+    %{!E:jc1 %i %(cc1_options) %{+e*} %{I*} %{MD} %{MMD} %{M} %{MM}\
              %{!S:-o %{|!pipe:%g.s} |\n\
     as %(asm_options) %{!pipe:%g.s} %A }}"},