OpenJDK / jdk / jdk
changeset 53033:dcbb71b9e7c0
8215319: jck lang/INTF/intf049/intf04901 fails in Graal as JIT mode with -Xcomp and AOTed Graal
Reviewed-by: iveresov, never, dlong
author | dnsimon |
---|---|
date | Fri, 14 Dec 2018 16:52:17 -0800 |
parents | 89bb635ed093 |
children | de99beff5c0e |
files | src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java |
diffstat | 1 files changed, 8 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Fri Dec 14 13:13:06 2018 -0800 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Fri Dec 14 16:52:17 2018 -0800 @@ -4195,7 +4195,6 @@ handleIllegalNewInstance(resolvedType); return; } - maybeEagerlyInitialize(resolvedType); ClassInitializationPlugin classInitializationPlugin = graphBuilderConfig.getPlugins().getClassInitializationPlugin(); @@ -4509,7 +4508,6 @@ } ResolvedJavaType holder = resolvedField.getDeclaringClass(); - maybeEagerlyInitialize(holder); ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null) { classInitializationPlugin.apply(this, holder, this::createCurrentFrameState); @@ -4545,16 +4543,20 @@ private ResolvedJavaField resolveStaticFieldAccess(JavaField field, ValueNode value) { if (field instanceof ResolvedJavaField) { ResolvedJavaField resolvedField = (ResolvedJavaField) field; - if (resolvedField.getDeclaringClass().isInitialized() || graphBuilderConfig.getPlugins().getClassInitializationPlugin() != null) { + ResolvedJavaType resolvedType = resolvedField.getDeclaringClass(); + maybeEagerlyInitialize(resolvedType); + + if (resolvedType.isInitialized() || graphBuilderConfig.getPlugins().getClassInitializationPlugin() != null) { return resolvedField; } + /* * Static fields have initialization semantics but may be safely accessed under certain * conditions while the class is being initialized. Executing in the clinit or init of - * classes which are subtypes of the field holder are sure to be running in a context - * where the access is safe. + * subclasses (but not implementers) of the field holder are sure to be running in a + * context where the access is safe. */ - if (resolvedField.getDeclaringClass().isAssignableFrom(method.getDeclaringClass())) { + if (!resolvedType.isInterface() && resolvedType.isAssignableFrom(method.getDeclaringClass())) { if (method.isClassInitializer() || method.isConstructor()) { return resolvedField; } @@ -4588,7 +4590,6 @@ ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); ResolvedJavaType holder = resolvedField.getDeclaringClass(); - maybeEagerlyInitialize(holder); if (classInitializationPlugin != null) { Supplier<FrameState> stateBefore = () -> { JavaKind[] pushedSlotKinds = {field.getJavaKind()};