]> gcc.gnu.org Git - gcc.git/commitdiff
verify.cc (_Jv_BytecodeVerifier::pop_type): Put PC into error message.
authorTom Tromey <tromey@redhat.com>
Mon, 19 Nov 2001 00:31:37 +0000 (00:31 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Mon, 19 Nov 2001 00:31:37 +0000 (00:31 +0000)
* verify.cc (_Jv_BytecodeVerifier::pop_type): Put PC into error
message.
(_Jv_BytecodeVerifier::pop64): Likewise.
(_Jv_BytecodeVerifier::pop32): Likewise.
(_Jv_BytecodeVerifier::pop_raw): Likewise.
(_Jv_BytecodeVerifier::pop_type): Promote the match type.
(type::set_initialized): Only modify uninitialized types.
(type::set_uninitialized): Fix shadowing bug.  Simplify code.

From-SVN: r47158

libjava/ChangeLog
libjava/verify.cc

index ac1a38ec981afe978d19cc33584264dca255288e..0afaa103bbb85d18d33e122d7ba62aad864dc31f 100644 (file)
@@ -1,5 +1,14 @@
 2001-11-18  Tom Tromey  <tromey@redhat.com>
 
+       * verify.cc (_Jv_BytecodeVerifier::pop_type): Put PC into error
+       message.
+       (_Jv_BytecodeVerifier::pop64): Likewise.
+       (_Jv_BytecodeVerifier::pop32): Likewise.
+       (_Jv_BytecodeVerifier::pop_raw): Likewise.
+       (_Jv_BytecodeVerifier::pop_type): Promote the match type.
+       (type::set_initialized): Only modify uninitialized types.
+       (type::set_uninitialized): Fix shadowing bug.  Simplify code.
+
        * verify.cc: Include StringBuffer.h.
        (verify_fail): Added pc argument.  Use StringBuffer to construct
        exception message.
index 9917d0ccbf3b5bb597cdc5250c350fa2839920e5..5d8fd809de7dc177b17411b0516d3fdb39f8a0e3 100644 (file)
@@ -353,20 +353,23 @@ private:
     }
 
     // Mark this type as the uninitialized result of `new'.
-    void set_uninitialized (int pc)
+    void set_uninitialized (int npc)
     {
-      if (key != reference_type && key != unresolved_reference_type)
+      if (key == reference_type)
+       key = uninitialized_reference_type;
+      else if (key == unresolved_reference_type)
+       key = uninitialized_unresolved_reference_type;
+      else
        verify_fail ("internal error in type::uninitialized");
-      key = (key == reference_type
-            ? uninitialized_reference_type
-            : uninitialized_unresolved_reference_type);
-      pc = pc;
+      pc = npc;
     }
 
     // Mark this type as now initialized.
     void set_initialized (int npc)
     {
-      if (pc == npc)
+      if (npc != UNINIT && pc == npc
+         && (key == uninitialized_reference_type
+             || key == uninitialized_unresolved_reference_type))
        {
          key = (key == uninitialized_reference_type
                 ? reference_type
@@ -834,11 +837,11 @@ private:
   type pop_raw ()
   {
     if (current_state->stacktop <= 0)
-      verify_fail ("stack empty");
+      verify_fail ("stack empty", start_PC);
     type r = current_state->stack[--current_state->stacktop];
     current_state->stackdepth -= r.depth ();
     if (current_state->stackdepth < 0)
-      verify_fail ("stack empty");
+      verify_fail ("stack empty", start_PC);
     return r;
   }
 
@@ -846,7 +849,7 @@ private:
   {
     type r = pop_raw ();
     if (r.iswide ())
-      verify_fail ("narrow pop of wide type");
+      verify_fail ("narrow pop of wide type", start_PC);
     return r;
   }
 
@@ -854,15 +857,16 @@ private:
   {
     type r = pop_raw ();
     if (! r.iswide ())
-      verify_fail ("wide pop of narrow type");
+      verify_fail ("wide pop of narrow type", start_PC);
     return r;
   }
 
   type pop_type (type match)
   {
+    match.promote ();
     type t = pop_raw ();
     if (! match.compatible (t))
-      verify_fail ("incompatible type on stack");
+      verify_fail ("incompatible type on stack", start_PC);
     return t;
   }
 
This page took 0.092928 seconds and 5 git commands to generate.