call to __Value methods can't pass fields as arguments

Roland Westrelin rwestrel at redhat.com
Fri Mar 24 15:08:28 UTC 2017


Hi Fred,

Thanks for looking at this.

> Thank you for finding this issue with the __Value methods,
>
> I’m concerned with changes in sharedRuntime.cpp:2607:
>
> 2605           ValueKlass* vk = ValueKlass::cast(holder);
>
> 2606           if (vk == SystemDictionary::___Value_klass()) {
> 2607             sig_extended.push(SigEntry(T_OBJECT));
> 2608           } else {
>
> 2609             const GrowableArray<SigEntry>& sig_vk = collect_fields(vk);
> 2610             sig_extended.appendAll(&sig_vk);
>
> 2611           }
>
> Is it trying passing a reference to a standalone value by pretending that it is
> an Object?

It is not. It's recording that a _Value should be passed as a reference
so the logic that performs the allocation of arguments to registers
picks up a register that can hold a reference. Using T_OBJECT here is
ugly. It should probably be revisited. I'll add a comment.

Roland.


More information about the valhalla-dev mailing list