re PR libgcj/7709 (NullPointerException in _Jv_ResolvePoolEntry)
authorJesse Rosenstock <jmr@ugcs.caltech.edu>
Wed, 25 Sep 2002 21:02:32 +0000 (21:02 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 25 Sep 2002 21:02:32 +0000 (21:02 +0000)
2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>

* resolve.cc (_Jv_ResolvePoolEntry) [end_of_method_search]: Check
to see if `the_method == 0' before looking up vtable index.
Fixes PR libgcj/7709.

From-SVN: r57517

libjava/ChangeLog
libjava/resolve.cc

index b97f9d53da074db1302673ea17a2b378bed7e8c8..dc94efbc3a03c6b97f28c16a0cbc889e270a4ee3 100644 (file)
@@ -1,3 +1,9 @@
+2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+
+       * resolve.cc (_Jv_ResolvePoolEntry) [end_of_method_search]: Check
+       to see if `the_method == 0' before looking up vtable index.
+       Fixes PR libgcj/7709.
+
 2002-09-25  Tom Tromey  <tromey@redhat.com>
 
        * java/lang/natClassLoader.cc: 
@@ -5,6 +11,7 @@
        * resolve.cc: Include NoClassDefFoundError.h, not
        ClassNotFoundException.h.
        (_Jv_ResolvePoolEntry): Throw NoClassDefFoundError, per spec.
+
        * defineclass.cc: Don't include ClassNotFoundException.h.
 
        * resolve.cc: Include StringBuffer.
index af1f7c60c1af0faa23afbd75080fd9c4b4d3cd25..f3b98a7a348693b09183d14937dc3c7bab8dae9f 100644 (file)
@@ -303,16 +303,6 @@ _Jv_ResolvePoolEntry (jclass klass, int index)
       // with either loader should produce the same result,
       // i.e., exactly the same jclass object. JVMS 5.4.3.3    
     
-      if (pool->tags[index] == JV_CONSTANT_InterfaceMethodref)
-       vtable_index = -1;
-      else
-       vtable_index = _Jv_DetermineVTableIndex
-         (found_class, method_name, method_signature);
-
-      if (vtable_index == METHOD_NOT_THERE)
-       throw_incompatible_class_change_error
-         (JvNewStringLatin1 ("method not found"));
-
       if (the_method == 0)
        {
          java::lang::StringBuffer *sb = new java::lang::StringBuffer();
@@ -324,6 +314,16 @@ _Jv_ResolvePoolEntry (jclass klass, int index)
          throw new java::lang::NoSuchMethodError (sb->toString());
        }
       
+      if (pool->tags[index] == JV_CONSTANT_InterfaceMethodref)
+       vtable_index = -1;
+      else
+       vtable_index = _Jv_DetermineVTableIndex (found_class, method_name,
+                                                method_signature);
+
+      if (vtable_index == METHOD_NOT_THERE)
+       throw_incompatible_class_change_error
+         (JvNewStringLatin1 ("method not found"));
+
       pool->data[index].rmethod = 
        _Jv_BuildResolvedMethod(the_method,
                                found_class,