RFR (M): Generate checks for vbox/vunbox; extend CI to include VCC-DVT mapping

Tobias Hartmann tobias.hartmann at oracle.com
Mon Apr 3 14:23:20 UTC 2017


Hi Zoltan,

On 03.04.2017 16:08, Zoltán Majó wrote:
>> Looks good. I just wonder if we really need 'guarantee' for the static checks. Existing code uses 'assert' for similar checks but it doesn't matter too much for now.
> 
> OK, let's keep the guarantees for now and change them to asserts later on if needed.

Okay, sounds good.

>>>>     - In vunbox(), I would check for equality of the source_type and the target_vcc_klass
>>> In some cases (e.g., when the declared type source_type is java.lang.Object) the check you mention is not sufficient. We need to generate a dynamic type check in that case -- test_64 covers that scenario.
>> Sure but what I meant is a dynamic check for type equality of the VCC (derived from the target value type) and the source type instead of a subtype check.
> 
> Oh, I see. The code in webrev.01 generates code to perform a type equality check (and does not generate subtype checks).

Right, I got confused by the 'target_vcc_klass->is_subclass_of(source_type->klass()' check.

>> Because we don't support subtyping, right?
> 
> That is right.
> 
>> Test64 should only ever pass if 'vcc' is ValueCapableClass1.
> 
> That is correct and that's what also happens.

Okay, thanks for verifying.

>> For example, with VCC A and class B which is a subtype of A, vunbox of B to A$Value should fail, right? I think we should also add a test for this case.
> 
> That is also correct. Unfortunately, we cannot add a test like that because VCCs must be final (I tried making ValueCapableClass1 but that causes an java.lang.InternalError to be thrown "DeriveValueType class 'compiler.valhalla.valuetypes.ValueCapableClass1' is not a final class").

Okay, if this ever changes we can still add a test.

Your changes look good to me!

Thanks,
Tobias


More information about the valhalla-dev mailing list