RFR: 8185858: [MVT] "must constrain OSR typestate" crash

Roland Westrelin rwestrel at redhat.com
Wed Aug 9 08:38:02 UTC 2017


An OSR compilation with a __Value local fails because in

local_type_at() returns
TypeValueTypePtr::NOTNULL. Parse::fetch_interpreter_state() then uses
the basic type of TypeValueTypePtr::NOTNULL to load the __Value
local. That basic type is T_OBJECT so it loads a
TypeInstPtr::BOTTOM. Parse::check_interpreter_type() then casts the
result of the load to __Value. TypeInstPtr::BOTTOM and __Value are
unrelated and the outcome of the cast causes the assert failure.

C2 handles value types either as buffered values or unbuffered values
but we only have one basic type to designate a value type. I suggest we
add a new one for buffered values. That also helps clean up the calling
convention a bit.


More information about the valhalla-dev mailing list