verify.cc (type::compatible): Check initialization status first.
authorTom Tromey <tromey@redhat.com>
Tue, 26 Nov 2002 06:51:14 +0000 (06:51 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 26 Nov 2002 06:51:14 +0000 (06:51 +0000)
* verify.cc (type::compatible): Check initialization status
first.
* interpret.cc (run) [insn_invokespecial, invokespecial_resolved]:
Don't use NULLCHECK.

From-SVN: r59494

libjava/ChangeLog
libjava/interpret.cc
libjava/verify.cc

index c2b65f4306fbbd072e7ca0e35b98f0dcab9ebfca..df1c794e3ac1d08fb13dec2c0cfd09108b50f5b1 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-25  Tom Tromey  <tromey@redhat.com>
+
+       * verify.cc (type::compatible): Check initialization status
+       first.
+       * interpret.cc (run) [insn_invokespecial, invokespecial_resolved]:
+       Don't use NULLCHECK.
+
 2002-11-23  Mark Wielaard  <mark@klomp.org>
 
        * javax/naming/AuthenticationException.java: Update copyright header.
index d3f919bac13314829b1fbaa4a3ae06f0b3995133..bc324b13ba97990778352cdab7b072c3ee765564 100644 (file)
@@ -2795,7 +2795,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
 
        sp -= rmeth->stack_item_count;
 
-       NULLCHECK (sp[0].o);
+       // We don't use NULLCHECK here because we can't rely on that
+       // working for <init>.  So instead we do an explicit test.
+       if (! sp[0].o)
+         throw new java::lang::NullPointerException;
 
        fun = (void (*)()) rmeth->method->ncode;
 
@@ -2813,7 +2816,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
       {
        rmeth = (_Jv_ResolvedMethod *) AVAL ();
        sp -= rmeth->stack_item_count;
-       NULLCHECK (sp[0].o);
+       // We don't use NULLCHECK here because we can't rely on that
+       // working for <init>.  So instead we do an explicit test.
+       if (! sp[0].o)
+         throw new java::lang::NullPointerException;
        fun = (void (*)()) rmeth->method->ncode;
       }
       goto perform_invoke;
index 29f0f321a7f856c41fa4267c71bb8ba72b1f3948..5917ce09c7708800d4cf76c3da6d6a0623a72ddc 100644 (file)
@@ -458,8 +458,12 @@ private:
       if (key < reference_type || k.key < reference_type)
        return key == k.key;
 
+      // An initialized type and an uninitialized type are not
+      // compatible.
+      if (isinitialized () != k.isinitialized ())
+       return false;
+
       // The `null' type is convertible to any reference type.
-      // FIXME: is this correct for THIS?
       if (key == null_type || k.key == null_type)
        return true;
 
@@ -469,11 +473,6 @@ private:
          && data.klass == &java::lang::Object::class$)
        return true;
 
-      // An initialized type and an uninitialized type are not
-      // compatible.
-      if (isinitialized () != k.isinitialized ())
-       return false;
-
       // Two uninitialized objects are compatible if either:
       // * The PCs are identical, or
       // * One PC is UNINIT.