Adapter sharing is broken with -XX:+ValueTypePassFieldsAsArgs

Tobias Hartmann tobias.hartmann at oracle.com
Mon Mar 27 14:10:16 UTC 2017


Hi Roland,

thanks for looking at this!

On 27.03.2017 15:43, Roland Westrelin wrote:
> Why the change lines 2254-2281?
> You skip over the T_VALUETYPE/T_VOID markers, right?

Yes, I check for the T_VALUETYPE/T_VOID scope to avoid widening when we are passing the fields of a value type (see 'is_valuetype' argument of adapter_encoding).

> I don't think that's correct. With your change:
> 
> class MyValue1 {
>     int f1;
>     long f2;
> }
> 
> class MyValue3 {
>     int f1;
> }
> 
> class MyValue4 {
>     long f2;
> }
> 
> class MyValue2 {
>     MyValue3 f1;
>     MyValue4 f2;
> }
> 
> MyValue1 and MyValue2 would share the same adapters but that would only
> be correct if they have the same layout (because now adapters embed hard
> coded offsets for fields). Is it true? Is it guaranteed that it doesn't
> change in the future?

Right, that's not intended and probably not guaranteed in the future.

I tried to remove the 'continue' statements but that triggers the "failed: code must match" assert again. Investigating.

Thanks,
Tobias


More information about the valhalla-dev mailing list