RFR(S): 8183129: [MVT] Type::get_typeflow_type() doesn't distinguish between TypeValueTypePtr & TypeValueType
tobias.hartmann at oracle.com
Thu Jun 29 09:55:12 UTC 2017
please review the following patch:
We crash during parsing due to mixing TypeValueType and TypeValueTypePtr. The problem is that typeflow analysis incorrectly sets the type of a PhiNode to TypeValueType instead of TypeValueTypePtr for a __Value argument used in a lambda form. When inlining a method handle intrinsic in CallGenerator::for_method_handle_inline() we should cast all arguments to their actual types but we miss the PhiNode because it's already of TypeValueType. We then fail in Parse::do_vunbox() because the input node is a Phi (and not a ValueTypeNode). We may also fail with a typesystem assert.
I fixed typeflow analysis and added a regression test that triggers these problems by using MethodHandles.guardWithTest to merge __Value from two branches. I also added an assert to catch these problems earlier. This depends on the SELECT_ALTERNATIVE intrinsic (GWT) being implemented in the value type LambdaFormBuilder .
Thanks to Vladimir Ivanov for reporting this bug and finding the root cause!
More information about the valhalla-dev