From 2e95a6c3583cd414ac3fe60fa42f779a07acd3c7 Mon Sep 17 00:00:00 2001
From: Andrew Haley <aph@gcc.gnu.org>
Date: Thu, 12 Mar 2009 16:13:19 +0000
Subject: [PATCH] [multiple changes]

2009-03-11  Andrew Haley  <aph@redhat.com>

	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault): Clear
	INTERPRETED access modifier.

2009-03-11  Tom Tromey  <tromey@redhat.com>

	* link.cc (_Jv_Linker::find_field): Pass the field_type to
	_Jv_CheckOrCreateLoadingConstraint, not the class that is
	requesting the field.

From-SVN: r144818
---
 libjava/ChangeLog                   | 11 +++++++++++
 libjava/java/lang/natClassLoader.cc |  9 +++++++++
 libjava/link.cc                     |  2 +-
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 2408ebffd74e..6d33fdda55f0 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,14 @@
+2009-03-11  Andrew Haley  <aph@redhat.com>
+
+	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault): Clear
+	INTERPRETED access modifier.
+
+2009-03-11  Tom Tromey  <tromey@redhat.com>
+
+	* link.cc (_Jv_Linker::find_field): Pass the field_type to
+	_Jv_CheckOrCreateLoadingConstraint, not the class that is
+	requesting the field.
+
 2009-03-03  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index fac1e4dede0c..237e038d1e78 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -380,6 +380,15 @@ _Jv_RegisterClassHookDefault (jclass klass)
   if (! klass->engine)
     klass->engine = &_Jv_soleCompiledEngine;
 
+  /* FIXME:  Way back before the dawn of time, we overloaded the
+     SYNTHETIC class access modifier to mean INTERPRETED.  This was a
+     Bad Thing, but it didn't matter then because classes were never
+     marked synthetic.  However, it is possible to redeem the
+     situation: _Jv_RegisterClassHookDefault is only called from
+     compiled classes, so we clear the INTERPRETED flag.  This is a
+     kludge!  */
+  klass->accflags &= ~java::lang::reflect::Modifier::INTERPRETED;
+
   if (system_class_list != SYSTEM_LOADER_INITIALIZED)
     {
       unsigned long abi = (unsigned long) klass->next_or_version;
diff --git a/libjava/link.cc b/libjava/link.cc
index c07b6e15c1c5..25114085bfc3 100644
--- a/libjava/link.cc
+++ b/libjava/link.cc
@@ -248,7 +248,7 @@ _Jv_Linker::find_field (jclass klass, jclass owner,
       // Note that the field returned by find_field_helper is always
       // resolved.  However, we still use the constraint mechanism
       // because this may affect other lookups.
-      _Jv_CheckOrCreateLoadingConstraint (klass, (*found_class)->loader);
+      _Jv_CheckOrCreateLoadingConstraint (field_type, (*found_class)->loader);
     }
   else
     {
-- 
GitLab