From eaa7d1b5d586ae9020116f7867ffefd168e452e8 Mon Sep 17 00:00:00 2001
From: bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 21 Mar 2000 05:12:20 +0000
Subject: [PATCH] 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>

        * java/lang/natClass.cc (isInstance): Initialize `this'.
        (isAssignableFrom): Initialize `this' and `klass'.
        (_Jv_IsAssignableFrom): If an interface has no idt, it is not
        implemented by any loaded class, so return false.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32663 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libjava/ChangeLog             | 7 +++++++
 libjava/java/lang/natClass.cc | 7 ++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index b2268dbb70f1..67cfcd6faeda 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,10 @@
+2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
+
+	* java/lang/natClass.cc (isInstance): Initialize `this'.
+	(isAssignableFrom): Initialize `this' and `klass'.
+	(_Jv_IsAssignableFrom): If an interface has no idt, it is not 
+	implemented by any loaded class, so return false.
+
 2000-03-19  Warren Levy  <warrenl@cygnus.com>
 
 	* java/awt/Color.java: Specified java.io for Serializable.
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 99fddf6d8aca..3e5644eca7e9 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -613,6 +613,9 @@ java::lang::Class::getMethods (void)
 jboolean
 java::lang::Class::isAssignableFrom (jclass klass)
 {
+  // Arguments may not have been initialized, given ".class" syntax.
+  _Jv_InitClass (this);
+  _Jv_InitClass (klass);
   return _Jv_IsAssignableFrom (this, klass);
 }
 
@@ -621,6 +624,7 @@ java::lang::Class::isInstance (jobject obj)
 {
   if (! obj || isPrimitive ())
     return false;
+  _Jv_InitClass (this);
   return isAssignableFrom (obj->getClass());
 }
 
@@ -919,6 +923,8 @@ _Jv_IsAssignableFrom (jclass target, jclass source)
     {
       _Jv_IDispatchTable *cl_idt = source->idt;
       _Jv_IDispatchTable *if_idt = target->idt;
+      if (if_idt == NULL)
+	return false; // No class implementing TARGET has been loaded.    
       jshort cl_iindex = cl_idt->cls.iindex;
       if (cl_iindex <= if_idt->iface.ioffsets[0])
         {
@@ -927,7 +933,6 @@ _Jv_IsAssignableFrom (jclass target, jclass source)
 	      && cl_idt->cls.itable[offset] == target)
 	    return true;
 	}
-      return false;
     }
     
   return false;
-- 
GitLab