src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File
open Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
Print this page
*** 4193,4203 ****
protected void genNewInstance(ResolvedJavaType resolvedType) {
if (resolvedType.isAbstract() || resolvedType.isInterface()) {
handleIllegalNewInstance(resolvedType);
return;
}
-
maybeEagerlyInitialize(resolvedType);
ClassInitializationPlugin classInitializationPlugin = graphBuilderConfig.getPlugins().getClassInitializationPlugin();
if (!resolvedType.isInitialized() && classInitializationPlugin == null) {
handleIllegalNewInstance(resolvedType);
--- 4193,4202 ----
*** 4507,4517 ****
frameState.push(field.getJavaKind(), ConstantNode.forBoolean(true, graph));
return;
}
ResolvedJavaType holder = resolvedField.getDeclaringClass();
- maybeEagerlyInitialize(holder);
ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin();
if (classInitializationPlugin != null) {
classInitializationPlugin.apply(this, holder, this::createCurrentFrameState);
}
--- 4506,4515 ----
*** 4543,4562 ****
}
private ResolvedJavaField resolveStaticFieldAccess(JavaField field, ValueNode value) {
if (field instanceof ResolvedJavaField) {
ResolvedJavaField resolvedField = (ResolvedJavaField) field;
! if (resolvedField.getDeclaringClass().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.
*/
! if (resolvedField.getDeclaringClass().isAssignableFrom(method.getDeclaringClass())) {
if (method.isClassInitializer() || method.isConstructor()) {
return resolvedField;
}
}
}
--- 4541,4564 ----
}
private ResolvedJavaField resolveStaticFieldAccess(JavaField field, ValueNode value) {
if (field instanceof ResolvedJavaField) {
ResolvedJavaField resolvedField = (ResolvedJavaField) field;
! 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
! * subclasses (but not implementers) of the field holder are sure to be running in a
! * context where the access is safe.
*/
! if (!resolvedType.isInterface() && resolvedType.isAssignableFrom(method.getDeclaringClass())) {
if (method.isClassInitializer() || method.isConstructor()) {
return resolvedField;
}
}
}
*** 4586,4596 ****
graph.recordField(resolvedField);
}
ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin();
ResolvedJavaType holder = resolvedField.getDeclaringClass();
- maybeEagerlyInitialize(holder);
if (classInitializationPlugin != null) {
Supplier<FrameState> stateBefore = () -> {
JavaKind[] pushedSlotKinds = {field.getJavaKind()};
ValueNode[] pushedValues = {value};
FrameState fs = frameState.create(bci(), getNonIntrinsicAncestor(), false, pushedSlotKinds, pushedValues);
--- 4588,4597 ----
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File