RFR(S): 8207773: [lworld] C2 should not allocate when returning a value type as Object from an inlined method
john.r.rose at oracle.com
Wed Jul 18 20:08:48 UTC 2018
That looks good, but the pre-existing assert may be overly restrictive:
assert(tr->isa_instptr()->klass()->is_java_lang_Object(), "must be java.lang.Object");
The JVM treats all interfaces as untyped pointers, as well as Object.
The verifier allows pervasive unchecked conversions between any interface
and Object. See VerificationType::resolve_and_check_assignability
and note that from_field_is_protected is false almost always.
This odd status of interfaces has often been forgotten in JIT code.
Any C2 TypeInstPtr whose klass is an interface is a general reference,
a value of which may or may not implement the interface in question.
In other words, anywhere an Object is allows, an interface is probably
I wonder, do we have to do a round of assert adjustment the first time we
mix values with interfaces? And one of the advantages of L-world is simple
interop between interfaces and values: Are we giving up on this in LW1?
On Jul 18, 2018, at 9:02 AM, Tobias Hartmann <tobias.hartmann at oracle.com> wrote:
> Thanks Roland!
> Best regards,
> On 18.07.2018 17:56, Roland Westrelin wrote:
>> That looks good.
More information about the valhalla-dev