Mercurial > hg > truffle
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; }