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