8307125: compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java hits assert(!Continuation::is_frame_in_continuation(thread(), fr())) failed: No support for deferred values in continuations
Reviewed-by: never
This commit is contained in:
parent
98acce13d5
commit
89b3c375ac
@ -51,6 +51,10 @@ public interface InspectedFrame {
|
|||||||
/**
|
/**
|
||||||
* This method will materialize all virtual objects, deoptimize the stack frame and make sure
|
* This method will materialize all virtual objects, deoptimize the stack frame and make sure
|
||||||
* that subsequent execution of the deoptimized frame uses the materialized values.
|
* that subsequent execution of the deoptimized frame uses the materialized values.
|
||||||
|
*
|
||||||
|
* @see StackIntrospection#canMaterializeVirtualObjects
|
||||||
|
* @throws IllegalArgumentException if stack introspection does not support
|
||||||
|
* materialization of virtual objects for this frame
|
||||||
*/
|
*/
|
||||||
void materializeVirtualObjects(boolean invalidateCode);
|
void materializeVirtualObjects(boolean invalidateCode);
|
||||||
|
|
||||||
|
@ -43,4 +43,12 @@ public interface StackIntrospection {
|
|||||||
* should stop), or null if the whole stack was iterated.
|
* should stop), or null if the whole stack was iterated.
|
||||||
*/
|
*/
|
||||||
<T> T iterateFrames(ResolvedJavaMethod[] initialMethods, ResolvedJavaMethod[] matchingMethods, int initialSkip, InspectedFrameVisitor<T> visitor);
|
<T> T iterateFrames(ResolvedJavaMethod[] initialMethods, ResolvedJavaMethod[] matchingMethods, int initialSkip, InspectedFrameVisitor<T> visitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if {@link InspectedFrame#materializeVirtualObjects(boolean)} can be called for frames
|
||||||
|
* visited by {@link #iterateFrames}.
|
||||||
|
*/
|
||||||
|
default boolean canMaterializeVirtualObjects() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,9 @@ public class HotSpotStackFrameReference implements InspectedFrame {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void materializeVirtualObjects(boolean invalidateCode) {
|
public void materializeVirtualObjects(boolean invalidateCode) {
|
||||||
|
if (Thread.currentThread().isVirtual()) {
|
||||||
|
throw new IllegalArgumentException("cannot materialize frames of a virtual thread");
|
||||||
|
}
|
||||||
compilerToVM.materializeVirtualObjects(this, invalidateCode);
|
compilerToVM.materializeVirtualObjects(this, invalidateCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,4 +39,10 @@ public class HotSpotStackIntrospection implements StackIntrospection {
|
|||||||
CompilerToVM compilerToVM = runtime.getCompilerToVM();
|
CompilerToVM compilerToVM = runtime.getCompilerToVM();
|
||||||
return compilerToVM.iterateFrames(initialMethods, matchingMethods, initialSkip, visitor);
|
return compilerToVM.iterateFrames(initialMethods, matchingMethods, initialSkip, visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canMaterializeVirtualObjects() {
|
||||||
|
// Virtual threads do not support materializing locals (JDK-8307125)
|
||||||
|
return !Thread.currentThread().isVirtual();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
####
|
####
|
||||||
# Bugs
|
# Bugs
|
||||||
|
|
||||||
compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java 8307125 generic-all
|
|
||||||
serviceability/AsyncGetCallTrace/MyPackage/ASGCTBaseTest.java 8308026 generic-all
|
serviceability/AsyncGetCallTrace/MyPackage/ASGCTBaseTest.java 8308026 generic-all
|
||||||
serviceability/jvmti/GetThreadListStackTraces/OneGetThreadListStackTraces.java 8308027 generic-all
|
serviceability/jvmti/GetThreadListStackTraces/OneGetThreadListStackTraces.java 8308027 generic-all
|
||||||
serviceability/jvmti/Heap/IterateHeapWithEscapeAnalysisEnabled.java 8264699 generic-all
|
serviceability/jvmti/Heap/IterateHeapWithEscapeAnalysisEnabled.java 8264699 generic-all
|
||||||
|
@ -277,11 +277,6 @@ public class CompilerToVMHelper {
|
|||||||
return CTVM.iterateFrames(initialMethods, matchingMethods, initialSkip, visitor);
|
return CTVM.iterateFrames(initialMethods, matchingMethods, initialSkip, visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void materializeVirtualObjects(
|
|
||||||
HotSpotStackFrameReference stackFrame, boolean invalidate) {
|
|
||||||
CTVM.materializeVirtualObjects(stackFrame, invalidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getVtableIndexForInterfaceMethod(HotSpotResolvedObjectType type,
|
public static int getVtableIndexForInterfaceMethod(HotSpotResolvedObjectType type,
|
||||||
HotSpotResolvedJavaMethod method) {
|
HotSpotResolvedJavaMethod method) {
|
||||||
return CTVM.getVtableIndexForInterfaceMethod((HotSpotResolvedObjectTypeImpl) type, (HotSpotResolvedJavaMethodImpl) method);
|
return CTVM.getVtableIndexForInterfaceMethod((HotSpotResolvedObjectTypeImpl) type, (HotSpotResolvedJavaMethodImpl) method);
|
||||||
|
@ -157,7 +157,11 @@ public class MaterializeVirtualObjectTest {
|
|||||||
throw new SkippedException("Test needs compilation level 4");
|
throw new SkippedException("Test needs compilation level 4");
|
||||||
}
|
}
|
||||||
|
|
||||||
new MaterializeVirtualObjectTest().test();
|
try {
|
||||||
|
new MaterializeVirtualObjectTest().test();
|
||||||
|
} catch (MaterializationNotSupported e) {
|
||||||
|
Asserts.assertTrue(Thread.currentThread().isVirtual());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getName() {
|
private static String getName() {
|
||||||
@ -168,7 +172,6 @@ public class MaterializeVirtualObjectTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void test() {
|
private void test() {
|
||||||
System.out.println(getName());
|
|
||||||
Asserts.assertFalse(WB.isMethodCompiled(MATERIALIZED_METHOD),
|
Asserts.assertFalse(WB.isMethodCompiled(MATERIALIZED_METHOD),
|
||||||
getName() + " : materialized method is compiled");
|
getName() + " : materialized method is compiled");
|
||||||
Asserts.assertFalse(WB.isMethodCompiled(NOT_MATERIALIZED_METHOD),
|
Asserts.assertFalse(WB.isMethodCompiled(NOT_MATERIALIZED_METHOD),
|
||||||
@ -230,6 +233,14 @@ public class MaterializeVirtualObjectTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void materializeVirtualObjects(InspectedFrame f, boolean invalidateCode) {
|
||||||
|
try {
|
||||||
|
f.materializeVirtualObjects(invalidateCode);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
throw new MaterializationNotSupported(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void checkStructure(boolean materialize) {
|
private void checkStructure(boolean materialize) {
|
||||||
boolean[] framesSeen = new boolean[2];
|
boolean[] framesSeen = new boolean[2];
|
||||||
Object[] helpers = new Object[1];
|
Object[] helpers = new Object[1];
|
||||||
@ -248,7 +259,7 @@ public class MaterializeVirtualObjectTest {
|
|||||||
Asserts.assertEQ(((Helper) f.getLocal(3)).string, "foo", "innerHelper.string should be foo");
|
Asserts.assertEQ(((Helper) f.getLocal(3)).string, "foo", "innerHelper.string should be foo");
|
||||||
helpers[0] = f.getLocal(1);
|
helpers[0] = f.getLocal(1);
|
||||||
if (materialize) {
|
if (materialize) {
|
||||||
f.materializeVirtualObjects(false);
|
materializeVirtualObjects(f, false);
|
||||||
}
|
}
|
||||||
return null; //continue
|
return null; //continue
|
||||||
} else {
|
} else {
|
||||||
@ -306,7 +317,7 @@ public class MaterializeVirtualObjectTest {
|
|||||||
Asserts.assertTrue(notMaterialized.hasVirtualObjects(), getName()
|
Asserts.assertTrue(notMaterialized.hasVirtualObjects(), getName()
|
||||||
+ ": notMaterialized frame has no virtual object before materialization");
|
+ ": notMaterialized frame has no virtual object before materialization");
|
||||||
// materialize
|
// materialize
|
||||||
CompilerToVMHelper.materializeVirtualObjects(materialized, INVALIDATE);
|
materializeVirtualObjects(materialized, INVALIDATE);
|
||||||
// check that only not materialized frame has virtual objects
|
// check that only not materialized frame has virtual objects
|
||||||
Asserts.assertFalse(materialized.hasVirtualObjects(), getName()
|
Asserts.assertFalse(materialized.hasVirtualObjects(), getName()
|
||||||
+ " : materialized has virtual object after materialization");
|
+ " : materialized has virtual object after materialization");
|
||||||
@ -331,4 +342,10 @@ public class MaterializeVirtualObjectTest {
|
|||||||
this.string = s;
|
this.string = s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class MaterializationNotSupported extends RuntimeException {
|
||||||
|
public MaterializationNotSupported(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user