RFR(S): 8202399:) [C1] LIRGenerator::do_CheckCast needs to exclude is_invokespecial_receiver_check() when using PatchAlot
David Holmes
david.holmes at oracle.com
Mon Apr 30 03:03:17 UTC 2018
Bug: https://bugs.openjdk.java.net/browse/JDK-8202399
webrev: http://cr.openjdk.java.net/~dholmes/8202399/webrev/
JDK-8168699 introduced a special case for
is_invokespecial_receiver_check() in LIRGenerator::do_CheckCast:
} else if (x->is_invokespecial_receiver_check()) {
assert(patching_info == NULL, "can't patch this");
stub = new DeoptimizeStub(info_for_exception,
Deoptimization::Reason_class_check,
Deoptimization::Action_none);
but overlooked a potential bad interaction with PatchAlot. This can lead
to the assertion failure as observed during testing for JDK-8200167
with Graal. The proposed fix (supplied by Vladimir) is quite simple but
needs to be applied to each of the CPU specific files:
diff --git a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
--- a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
+++ b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
@@ -1314,7 +1314,7 @@
LIRItem obj(x->obj(), this);
CodeEmitInfo* patching_info = NULL;
- if (!x->klass()->is_loaded() || (PatchALot &&
!x->is_incompatible_class_change_check())) {
+ if (!x->klass()->is_loaded() || (PatchALot &&
!x->is_incompatible_class_change_check() &&
!x->is_invokespecial_receiver_check())) {
Testing:
- hotspot/jtreg/compiler (complete)
- hs-comp-precheckin (once mach5 is available)
Thanks,
David
More information about the hotspot-compiler-dev
mailing list