8146608: [JVMCI] DebugInfo Tests on DeoptimizeALot runs fails in assert(_pc == *pc_addr || pc == *pc_addr) frame::patch_pc() /frame_x86.cpp:285
Reviewed-by: twisti
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledCode.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledCode.java Wed Feb 03 12:16:44 2016 +0100
@@ -24,6 +24,7 @@
import jdk.vm.ci.code.BytecodeFrame;
import jdk.vm.ci.code.CompiledCode;
+import jdk.vm.ci.code.StackSlot;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.Infopoint;
import jdk.vm.ci.code.site.Site;
@@ -99,9 +100,9 @@
protected final int totalFrameSize;
/**
- * Offset in bytes for the custom stack area (relative to sp).
+ * The deopt rescue slot. Must be non-null if there is a safepoint in the method.
*/
- protected final int customStackAreaOffset;
+ protected final StackSlot deoptRescueSlot;
public static class Comment {
@@ -115,7 +116,7 @@
}
public HotSpotCompiledCode(String name, byte[] targetCode, int targetCodeSize, Site[] sites, Assumption[] assumptions, ResolvedJavaMethod[] methods, Comment[] comments, byte[] dataSection,
- int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, int customStackAreaOffset) {
+ int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, StackSlot deoptRescueSlot) {
this.name = name;
this.targetCode = targetCode;
this.targetCodeSize = targetCodeSize;
@@ -129,7 +130,7 @@
this.dataSectionPatches = dataSectionPatches;
this.isImmutablePIC = isImmutablePIC;
this.totalFrameSize = totalFrameSize;
- this.customStackAreaOffset = customStackAreaOffset;
+ this.deoptRescueSlot = deoptRescueSlot;
assert validateFrames();
}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledNmethod.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledNmethod.java Wed Feb 03 12:16:44 2016 +0100
@@ -22,6 +22,7 @@
*/
package jdk.vm.ci.hotspot;
+import jdk.vm.ci.code.StackSlot;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.Site;
import jdk.vm.ci.inittimer.SuppressFBWarnings;
@@ -55,9 +56,9 @@
@SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "set by the VM") private String installationFailureMessage;
public HotSpotCompiledNmethod(String name, byte[] targetCode, int targetCodeSize, Site[] sites, Assumption[] assumptions, ResolvedJavaMethod[] methods, Comment[] comments, byte[] dataSection,
- int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, int customStackAreaOffset, HotSpotResolvedJavaMethod method, int entryBCI,
+ int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, StackSlot deoptRescueSlot, HotSpotResolvedJavaMethod method, int entryBCI,
int id, long jvmciEnv, boolean hasUnsafeAccess) {
- super(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, customStackAreaOffset);
+ super(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, deoptRescueSlot);
this.method = method;
this.entryBCI = entryBCI;
this.id = id;
--- a/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.cpp Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.cpp Wed Feb 03 12:16:44 2016 +0100
@@ -546,7 +546,7 @@
// Make sure a valid compile_id is associated with every compile
id = CompileBroker::assign_compile_id_unlocked(Thread::current(), method, entry_bci);
}
- result = JVMCIEnv::register_method(method, nm, entry_bci, &_offsets, _custom_stack_area_offset, &buffer,
+ result = JVMCIEnv::register_method(method, nm, entry_bci, &_offsets, _orig_pc_offset, &buffer,
stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table,
compiler, _debug_recorder, _dependencies, env, id,
has_unsafe_access, _has_wide_vector, installed_code, compiled_code, speculation_log);
@@ -576,7 +576,19 @@
_code_handle = JNIHandles::make_local(HotSpotCompiledCode::targetCode(compiled_code));
_code_size = HotSpotCompiledCode::targetCodeSize(compiled_code);
_total_frame_size = HotSpotCompiledCode::totalFrameSize(compiled_code);
- _custom_stack_area_offset = HotSpotCompiledCode::customStackAreaOffset(compiled_code);
+
+ oop deoptRescueSlot = HotSpotCompiledCode::deoptRescueSlot(compiled_code);
+ if (deoptRescueSlot == NULL) {
+ _orig_pc_offset = -1;
+ } else {
+ _orig_pc_offset = StackSlot::offset(deoptRescueSlot);
+ if (StackSlot::addFrameSize(deoptRescueSlot)) {
+ _orig_pc_offset += _total_frame_size;
+ }
+ if (_orig_pc_offset < 0) {
+ JVMCI_ERROR("invalid deopt rescue slot: %d", _orig_pc_offset);
+ }
+ }
// Pre-calculate the constants section size. This is required for PC-relative addressing.
_data_section_handle = JNIHandles::make_local(HotSpotCompiledCode::dataSection(compiled_code));
@@ -724,6 +736,9 @@
if (site_InfopointReason::SAFEPOINT() == reason || site_InfopointReason::CALL() == reason || site_InfopointReason::IMPLICIT_EXCEPTION() == reason) {
TRACE_jvmci_4("safepoint at %i", pc_offset);
site_Safepoint(buffer, pc_offset, site, CHECK_OK);
+ if (_orig_pc_offset < 0) {
+ JVMCI_ERROR_OK("method contains safepoint, but has not deopt rescue slot");
+ }
} else {
TRACE_jvmci_4("infopoint at %i", pc_offset);
site_Infopoint(buffer, pc_offset, site, CHECK_OK);
--- a/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.hpp Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.hpp Wed Feb 03 12:16:44 2016 +0100
@@ -125,7 +125,7 @@
jobject _code_handle;
jint _code_size;
jint _total_frame_size;
- jint _custom_stack_area_offset;
+ jint _orig_pc_offset;
jint _parameter_count;
jint _constants_size;
#ifndef PRODUCT
--- a/hotspot/src/share/vm/jvmci/jvmciJavaClasses.hpp Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciJavaClasses.hpp Wed Feb 03 12:16:44 2016 +0100
@@ -91,7 +91,7 @@
objArrayOop_field(HotSpotCompiledCode, dataSectionPatches, "[Ljdk/vm/ci/code/site/DataPatch;") \
boolean_field(HotSpotCompiledCode, isImmutablePIC) \
int_field(HotSpotCompiledCode, totalFrameSize) \
- int_field(HotSpotCompiledCode, customStackAreaOffset) \
+ oop_field(HotSpotCompiledCode, deoptRescueSlot, "Ljdk/vm/ci/code/StackSlot;") \
end_class \
start_class(HotSpotCompiledCode_Comment) \
oop_field(HotSpotCompiledCode_Comment, text, "Ljava/lang/String;") \
--- a/hotspot/test/compiler/jvmci/code/TestAssembler.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/code/TestAssembler.java Wed Feb 03 12:16:44 2016 +0100
@@ -181,6 +181,8 @@
private int stackAlignment;
private int curStackSlot;
+ private StackSlot deoptRescue;
+
protected TestAssembler(CodeCacheProvider codeCache, int initialFrameSize, int stackAlignment, PlatformKind narrowOopKind, Register... registers) {
this.narrowOopKind = LIRKind.reference(narrowOopKind);
@@ -216,6 +218,10 @@
return StackSlot.get(kind, -curStackSlot, true);
}
+ protected void setDeoptRescueSlot(StackSlot deoptRescue) {
+ this.deoptRescue = deoptRescue;
+ }
+
protected void recordImplicitException(DebugInfo info) {
sites.add(new Infopoint(code.position(), info, InfopointReason.IMPLICIT_EXCEPTION));
}
@@ -249,7 +255,7 @@
byte[] finishedData = data.finish();
DataPatch[] finishedDataPatches = dataPatches.toArray(new DataPatch[0]);
return new HotSpotCompiledNmethod(method.getName(), finishedCode, finishedCode.length, finishedSites, new Assumption[0], new ResolvedJavaMethod[]{method}, new Comment[0], finishedData, 16,
- finishedDataPatches, false, frameSize, 0, method, 0, id, 0L, false);
+ finishedDataPatches, false, frameSize, deoptRescue, method, 0, id, 0L, false);
}
protected static class Buffer {
--- a/hotspot/test/compiler/jvmci/code/amd64/AMD64TestAssembler.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/code/amd64/AMD64TestAssembler.java Wed Feb 03 12:16:44 2016 +0100
@@ -63,6 +63,7 @@
emitFatNop();
code.emitByte(0x50 | AMD64.rbp.encoding); // PUSH rbp
emitMove(true, AMD64.rbp, AMD64.rsp); // MOV rbp, rsp
+ setDeoptRescueSlot(newStackSlot(LIRKind.value(AMD64Kind.QWORD)));
}
@Override
--- a/hotspot/test/compiler/jvmci/code/sparc/SPARCTestAssembler.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/code/sparc/SPARCTestAssembler.java Wed Feb 03 12:16:44 2016 +0100
@@ -68,6 +68,7 @@
@Override
public void emitPrologue() {
emitOp3(0b10, SPARC.sp, 0b111100, SPARC.sp, -SPARC.REGISTER_SAFE_AREA_SIZE); // SAVE sp, -128, sp
+ setDeoptRescueSlot(newStackSlot(LIRKind.value(SPARCKind.XWORD)));
}
@Override
--- a/hotspot/test/compiler/jvmci/errors/CodeInstallerTest.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/errors/CodeInstallerTest.java Wed Feb 03 12:16:44 2016 +0100
@@ -28,6 +28,7 @@
import jdk.vm.ci.code.Architecture;
import jdk.vm.ci.code.CodeCacheProvider;
import jdk.vm.ci.code.Register;
+import jdk.vm.ci.code.StackSlot;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.Site;
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
@@ -71,9 +72,9 @@
dummyMethod = metaAccess.lookupJavaMethod(method);
}
- protected void installEmptyCode(Site[] sites, Assumption[] assumptions, Comment[] comments, int dataSectionAlignment, DataPatch[] dataSectionPatches) {
+ protected void installEmptyCode(Site[] sites, Assumption[] assumptions, Comment[] comments, int dataSectionAlignment, DataPatch[] dataSectionPatches, StackSlot deoptRescueSlot) {
HotSpotCompiledCode code = new HotSpotCompiledCode("dummyMethod", new byte[0], 0, sites, assumptions, new ResolvedJavaMethod[]{dummyMethod}, comments, new byte[8], dataSectionAlignment,
- dataSectionPatches, false, 0, 0);
+ dataSectionPatches, false, 0, deoptRescueSlot);
codeCache.addCode(dummyMethod, code, null, null);
}
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Wed Feb 03 12:16:44 2016 +0100
@@ -30,6 +30,7 @@
package compiler.jvmci.errors;
+import jdk.vm.ci.code.StackSlot;
import jdk.vm.ci.code.site.ConstantReference;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.DataSectionReference;
@@ -80,104 +81,111 @@
@Test(expected = JVMCIError.class)
public void testInvalidAssumption() {
- installEmptyCode(new Site[0], new Assumption[]{new InvalidAssumption()}, new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[0], new Assumption[]{new InvalidAssumption()}, new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInvalidAlignment() {
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 7, new DataPatch[0]);
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 7, new DataPatch[0], null);
}
@Test(expected = NullPointerException.class)
public void testNullDataPatchInDataSection() {
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{null});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{null}, null);
}
@Test(expected = NullPointerException.class)
public void testNullReferenceInDataSection() {
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, null)});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, null)}, null);
}
@Test(expected = JVMCIError.class)
public void testInvalidDataSectionReference() {
DataSectionReference ref = new DataSectionReference();
ref.setOffset(0);
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)}, null);
}
@Test(expected = JVMCIError.class)
public void testInvalidNarrowMethodInDataSection() {
HotSpotConstant c = (HotSpotConstant) dummyMethod.getEncoding();
ConstantReference ref = new ConstantReference((VMConstant) c.compress());
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)}, null);
}
@Test(expected = NullPointerException.class)
public void testNullConstantInDataSection() {
ConstantReference ref = new ConstantReference(null);
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)}, null);
}
@Test(expected = JVMCIError.class)
public void testInvalidConstantInDataSection() {
ConstantReference ref = new ConstantReference(new InvalidVMConstant());
- installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)});
+ installEmptyCode(new Site[0], new Assumption[0], new Comment[0], 16, new DataPatch[]{new DataPatch(0, ref)}, null);
}
@Test(expected = NullPointerException.class)
public void testNullReferenceInCode() {
- installEmptyCode(new Site[]{new DataPatch(0, null)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new DataPatch(0, null)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = NullPointerException.class)
public void testNullConstantInCode() {
ConstantReference ref = new ConstantReference(null);
- installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInvalidConstantInCode() {
ConstantReference ref = new ConstantReference(new InvalidVMConstant());
- installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInvalidReference() {
InvalidReference ref = new InvalidReference();
- installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testOutOfBoundsDataSectionReference() {
DataSectionReference ref = new DataSectionReference();
ref.setOffset(0x1000);
- installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new DataPatch(0, ref)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInvalidMark() {
- installEmptyCode(new Site[]{new Mark(0, new Object())}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new Mark(0, new Object())}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInvalidMarkInt() {
- installEmptyCode(new Site[]{new Mark(0, -1)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new Mark(0, -1)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = NullPointerException.class)
public void testNullSite() {
- installEmptyCode(new Site[]{null}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{null}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testInfopointMissingDebugInfo() {
Infopoint info = new Infopoint(0, null, InfopointReason.METHOD_START);
- installEmptyCode(new Site[]{info}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{info}, new Assumption[0], new Comment[0], 16, new DataPatch[0], null);
}
@Test(expected = JVMCIError.class)
public void testSafepointMissingDebugInfo() {
Infopoint info = new Infopoint(0, null, InfopointReason.SAFEPOINT);
- installEmptyCode(new Site[]{info}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ StackSlot deoptRescueSlot = StackSlot.get(null, 0, true);
+ installEmptyCode(new Site[]{info}, new Assumption[0], new Comment[0], 16, new DataPatch[0], deoptRescueSlot);
+ }
+
+ @Test(expected = JVMCIError.class)
+ public void testInvalidDeoptRescueSlot() {
+ StackSlot deoptRescueSlot = StackSlot.get(null, -1, false);
+ installEmptyCode(new Site[]{}, new Assumption[0], new Comment[0], 16, new DataPatch[0], deoptRescueSlot);
}
}
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Wed Feb 03 12:16:44 2016 +0100
@@ -66,10 +66,14 @@
}
private void test(VirtualObject[] vobj, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) {
+ test(vobj, values, slotKinds, locals, stack, locks, StackSlot.get(null, 0, true));
+ }
+
+ private void test(VirtualObject[] vobj, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks, StackSlot deoptRescueSlot) {
BytecodeFrame frame = new BytecodeFrame(null, dummyMethod, 0, false, false, values, slotKinds, locals, stack, locks);
DebugInfo info = new DebugInfo(frame, vobj);
info.setReferenceMap(new HotSpotReferenceMap(new Location[0], new Location[0], new int[0], 8));
- installEmptyCode(new Site[]{new Infopoint(0, info, InfopointReason.SAFEPOINT)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new Infopoint(0, info, InfopointReason.SAFEPOINT)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], deoptRescueSlot);
}
@Test(expected = NullPointerException.class)
@@ -83,6 +87,11 @@
}
@Test(expected = JVMCIError.class)
+ public void testMissingDeoptRescueSlot() {
+ test(null, new JavaValue[0], new JavaKind[0], 0, 0, 0, null);
+ }
+
+ @Test(expected = JVMCIError.class)
public void testUnexpectedScopeValuesLength() {
test(new JavaValue[]{JavaConstant.FALSE}, new JavaKind[0], 0, 0, 0);
}
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Wed Feb 03 12:16:44 2016 +0100
@@ -35,6 +35,7 @@
import jdk.vm.ci.code.Location;
import jdk.vm.ci.code.ReferenceMap;
import jdk.vm.ci.code.Register;
+import jdk.vm.ci.code.StackSlot;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.Infopoint;
import jdk.vm.ci.code.site.InfopointReason;
@@ -61,7 +62,7 @@
BytecodePosition pos = new BytecodePosition(null, dummyMethod, 0);
DebugInfo info = new DebugInfo(pos);
info.setReferenceMap(refMap);
- installEmptyCode(new Site[]{new Infopoint(0, info, InfopointReason.SAFEPOINT)}, new Assumption[0], new Comment[0], 16, new DataPatch[0]);
+ installEmptyCode(new Site[]{new Infopoint(0, info, InfopointReason.SAFEPOINT)}, new Assumption[0], new Comment[0], 16, new DataPatch[0], StackSlot.get(null, 0, true));
}
@Test(expected = NullPointerException.class)
--- a/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Thu Feb 04 12:33:31 2016 +0100
+++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Wed Feb 03 12:16:44 2016 +0100
@@ -109,7 +109,7 @@
.getResolvedMethod(SimpleClass.class, testMethod);
HotSpotCompiledCode compiledCode = new HotSpotCompiledCode(METHOD_NAME, new byte[0], 0, new Site[0],
new Assumption[0], new ResolvedJavaMethod[]{method}, new Comment[0], new byte[0], 16,
- new DataPatch[0], false, 0, 0);
+ new DataPatch[0], false, 0, null);
codeCache.installCode(method, compiledCode, /* installedCode = */ null, /* speculationLog = */ null,
/* isDefault = */ false);
Asserts.assertEQ(gotInstallNotification, 1,