RFR(S): 8207844: [lworld] Crash during method resolution because value type holder is not linked
John Rose
john.r.rose at oracle.com
Thu Jul 19 20:39:53 UTC 2018
Fix is good, but seems a little more cut-n-pasty than I like.
Suggest a cleanup which pull all of the conditional logic,
plus the deopt, into emit_guard_for_new.
See below.
On Jul 19, 2018, at 4:29 AM, Tobias Hartmann <tobias.hartmann at oracle.com> wrote:
>
> Hi,
>
> please review the following patch:
> https://bugs.openjdk.java.net/browse/JDK-8207844
> http://cr.openjdk.java.net/~thartmann/8207844/webrev.00/
diff --git a/src/hotspot/share/opto/parseHelper.cpp b/src/hotspot/share/opto/parseHelper.cpp
--- a/src/hotspot/share/opto/parseHelper.cpp
+++ b/src/hotspot/share/opto/parseHelper.cpp
@@ -311,18 +311,8 @@
assert(will_link, "_new: typeflow responsibility");
// Should initialize, or throw an InstantiationError?
- if ((!klass->is_initialized() && !klass->is_being_initialized()) ||
- klass->is_abstract() || klass->is_interface() ||
- klass->name() == ciSymbol::java_lang_Class() ||
- iter().is_unresolved_klass()) {
- uncommon_trap(Deoptimization::Reason_uninitialized,
- Deoptimization::Action_reinterpret,
- klass);
- return;
- }
- if (klass->is_being_initialized()) {
- emit_guard_for_new(klass);
- }
+ emit_guard_for_new(klass);
+ if (stopped()) return;
Node* kls = makecon(TypeKlassPtr::make(klass));
Node* obj = new_instance(kls);
@@ -349,6 +339,11 @@
bool will_link;
ciValueKlass* vk = iter().get_klass(will_link)->as_value_klass();
assert(will_link, "defaultvalue: typeflow responsibility");
+
+ // Should initialize, or throw an InstantiationError?
+ emit_guard_for_new(klass);
+ if (stopped()) return;
+
// Create and push a new default ValueTypeNode
push(ValueTypeNode::make_default(_gvn, vk));
}
More information about the valhalla-dev
mailing list