changeset 21660:e1ca9b57b63b

BytecodeParser#lookupField: explicitly initialize interface if it is the declaring class of the field.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 02 Jun 2015 14:40:06 +0200
parents 8580851e7605
children ccf89c722ac8
files graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Tue Jun 02 14:48:05 2015 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Tue Jun 02 14:40:06 2015 +0200
@@ -2861,6 +2861,14 @@
     private JavaField lookupField(int cpi, int opcode) {
         maybeEagerlyResolve(cpi, opcode);
         JavaField result = constantPool.lookupField(cpi, opcode);
+        if (graphBuilderConfig.unresolvedIsError()) {
+            assert result instanceof ResolvedJavaField : "Not resolved: " + result;
+            ResolvedJavaType declaringClass = ((ResolvedJavaField) result).getDeclaringClass();
+            if (!declaringClass.isInitialized()) {
+                assert declaringClass.isInterface() : "Declaring class not initialized but not an interface? " + declaringClass;
+                declaringClass.initialize();
+            }
+        }
         assert !graphBuilderConfig.unresolvedIsError() || (result instanceof ResolvedJavaField && ((ResolvedJavaField) result).getDeclaringClass().isInitialized()) : result;
         return result;
     }