aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2003-08-05 20:06:57 +0000
committerTom Tromey <tromey@gcc.gnu.org>2003-08-05 20:06:57 +0000
commit0196f4e0a514180bb0813f7a28f73beac5e47f13 (patch)
treee3f41a1bb10099f57d2d2cec78a1ba6efe2490d1 /libjava/java
parent0d4d227907e64eae08255f7f993e9bd0820b9d67 (diff)
downloadgcc-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
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/reflect/natField.cc11
1 files changed, 6 insertions, 5 deletions
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)
{