verify.cc (pop64): Removed.
authorTom Tromey <tromey@redhat.com>
Fri, 11 Apr 2003 01:57:05 +0000 (01:57 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Fri, 11 Apr 2003 01:57:05 +0000 (01:57 +0000)
* verify.cc (pop64): Removed.
(verify_instructions_0) <op_pop2>: Inline code.  Don't throw
exception if top-of-stack is narrow.
(initialize_stack): Check to ensure that <init> is not static and
<clinit> is.

From-SVN: r65453

libjava/ChangeLog
libjava/verify.cc

index 7ae2dd78245a0a832dad9c132ddb0b6882bd0bdd..d4403ef6ad4ec19116e1dfc0a36146dd76f471d6 100644 (file)
@@ -1,3 +1,11 @@
+2003-04-10  Tom Tromey  <tromey@redhat.com>
+
+       * verify.cc (pop64): Removed.
+       (verify_instructions_0) <op_pop2>: Inline code.  Don't throw
+       exception if top-of-stack is narrow.
+       (initialize_stack): Check to ensure that <init> is not static and
+       <clinit> is.
+
 2003-04-07  Aaron M. Renn (arenn@urbanophile.com)
 
        * java/io/ObjectStreamException
index 8f8c1df9eb18782aad568434be5f8db03fb498a4..4a6ca45884965e5db7fda5cfae64a733d797ed5e 100644 (file)
@@ -1202,14 +1202,6 @@ private:
     return r;
   }
 
-  type pop64 ()
-  {
-    type r = pop_raw ();
-    if (! r.iswide ())
-      verify_fail ("wide pop of narrow type");
-    return r;
-  }
-
   type pop_type (type match)
   {
     match.promote ();
@@ -2160,21 +2152,31 @@ private:
   bool initialize_stack ()
   {
     int var = 0;
-    bool is_init = false;
+    bool is_init = _Jv_equalUtf8Consts (current_method->self->name,
+                                       gcj::init_name);
+    bool is_clinit = _Jv_equalUtf8Consts (current_method->self->name,
+                                         gcj::clinit_name);
 
     using namespace java::lang::reflect;
     if (! Modifier::isStatic (current_method->self->accflags))
       {
        type kurr (current_class);
-       if (_Jv_equalUtf8Consts (current_method->self->name, gcj::init_name))
+       if (is_init)
          {
            kurr.set_uninitialized (type::SELF, this);
            is_init = true;
          }
+       else if (is_clinit)
+         verify_fail ("<clinit> method must be static");
        set_variable (0, kurr);
        current_state->set_this_type (kurr);
        ++var;
       }
+    else
+      {
+       if (is_init)
+         verify_fail ("<init> method must be non-static");
+      }
 
     // We have to handle wide arguments specially here.
     int arg_count = _Jv_count_arguments (current_method->self->signature);
@@ -2525,7 +2527,11 @@ private:
            pop32 ();
            break;
          case op_pop2:
-           pop64 ();
+           {
+             type t = pop_raw ();
+             if (! t.iswide ())
+               pop32 ();
+           }
            break;
          case op_dup:
            {