diff options
author | Tom Tromey <tromey@redhat.com> | 2003-08-05 20:06:57 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2003-08-05 20:06:57 +0000 |
commit | 0196f4e0a514180bb0813f7a28f73beac5e47f13 (patch) | |
tree | e3f41a1bb10099f57d2d2cec78a1ba6efe2490d1 | |
parent | 0d4d227907e64eae08255f7f993e9bd0820b9d67 (diff) | |
download | gcc-0196f4e0a514180bb0813f7a28f73beac5e47f13.zip gcc-0196f4e0a514180bb0813f7a28f73beac5e47f13.tar.gz gcc-0196f4e0a514180bb0813f7a28f73beac5e47f13.tar.bz2 |
re PR libgcj/11779 (Field reflection incorrectly throws IllegalAccessException)
Fix for PR libgcj/11779:
* java/lang/reflect/natField.cc (getAddr): Skip frames in Field
class.
From-SVN: r70185
-rw-r--r-- | libjava/ChangeLog | 4 | ||||
-rw-r--r-- | libjava/java/lang/reflect/natField.cc | 11 |
2 files changed, 10 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index be7d650..2ab9b0d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,9 @@ 2003-08-05 Tom Tromey <tromey@redhat.com> + Fix for PR libgcj/11779: + * java/lang/reflect/natField.cc (getAddr): Skip frames in Field + class. + * java/lang/reflect/Method.java: Updated status comment. Imported javadoc from Classpath and re-ordered methods. * java/lang/reflect/Constructor.java: Reindented. Updated diff --git a/libjava/java/lang/reflect/natField.cc b/libjava/java/lang/reflect/natField.cc index 5f104a9..b7f12f0 100644 --- a/libjava/java/lang/reflect/natField.cc +++ b/libjava/java/lang/reflect/natField.cc @@ -59,13 +59,14 @@ getAddr (java::lang::reflect::Field* field, jclass caller, jobject obj) // calls. However, we never implemented that, so we have to find // the caller by hand instead. gnu::gcj::runtime::StackTrace *t - = new gnu::gcj::runtime::StackTrace(4); + = new gnu::gcj::runtime::StackTrace(7); try { - for (int i = 1; !caller; i++) - { - caller = t->classAt (i); - } + // We want to skip all the frames on the stack from this class. + for (int i = 1; + !caller || caller == &java::lang::reflect::Field::class$; + i++) + caller = t->classAt (i); } catch (::java::lang::ArrayIndexOutOfBoundsException *e) { |