Summary: | NullPointerException in _Jv_ResolvePoolEntry | ||
---|---|---|---|
Product: | gcc | Reporter: | jmr |
Component: | libgcj | Assignee: | Tom Tromey <tromey> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | gcc-bugs, java-prs |
Priority: | P3 | ||
Version: | 3.3 | ||
Target Milestone: | --- | ||
Host: | i686-pc-linux-gnu | Target: | i686-pc-linux-gnu |
Build: | i686-pc-linux-gnu | Known to work: | |
Known to fail: | Last reconfirmed: |
Description
jmr
2002-08-24 00:26:02 UTC
Fix: I'm not sure about this, but it does get rid of the NullPointerException, and since the_method is not modified by the code I moved, perhaps the author intended the the_method == 0 check to go first. Index: resolve.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/resolve.cc,v retrieving revision 1.29 diff -c -r1.29 resolve.cc *** resolve.cc 20 Jun 2002 15:10:49 -0000 1.29 --- resolve.cc 24 Aug 2002 06:07:08 -0000 *************** *** 300,315 **** // 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) { jstring msg = JvNewStringLatin1 ("method "); --- 300,305 ---- *************** *** 320,325 **** --- 310,325 ---- throw new java::lang::NoSuchMethodError (msg); } + 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, Responsible-Changed-From-To: unassigned->tromey Responsible-Changed-Why: I'm handling the administrivia State-Changed-From-To: open->closed State-Changed-Why: Thanks. I agree your patch is correct. I'm checking it in. From: tromey@gcc.gnu.org To: gcc-gnats@gcc.gnu.org Cc: Subject: libgcj/7709 Date: 25 Sep 2002 21:02:33 -0000 CVSROOT: /cvs/gcc Module name: gcc Changes by: tromey@gcc.gnu.org 2002-09-25 14:02:33 Modified files: libjava : ChangeLog resolve.cc Log message: 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. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libjava/ChangeLog.diff?cvsroot=gcc&r1=1.1456&r2=1.1457 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libjava/resolve.cc.diff?cvsroot=gcc&r1=1.31&r2=1.32 |