On Thu, 10 Sep 2026 10:20:52 GMT, Ioi Lam <[email protected]> wrote:

> > Unfortunately, this doesn't work. I actually tried this first, passing the 
> > offset only instead of the vpc and relying on the field_holder(), but that 
> > is wrong. The code could be visiting a field inside an abstract value class 
> > and when that happens field_holder() doesn't match vpc.klass(). It is easy 
> > to trigger the assert by writing a test that creates an abstract value 
> > class with a field, then a concrete value class that inherits from it, put 
> > it in a holder object, and then route the holder into the print fields code.
> 
> Thanks for the clarification. I restored `ValuePayloadContext::klass()` and 
> used it inside `fieldDescriptor::field_offset_in_obj()`.
> 
> I also added an assert to clarify the relationship between `vpc->klass()` and 
> `this->field_holder()`.
> 
> We could actually get rid of `klass()`, as `vpc->klass()->payload_offset()` 
> must be the same as 
> `ValueKlass::cast(this->field_holder())->payload_offset()`. However, I think 
> that requires too much mental gymnastics and it's not worthwhile in this case.

Note that `ValueKlass::cast(this->field_holder())` will fail because abstract 
value classes are represented with an `InstanceKlass` and not a `ValueKlass`.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/32565#issuecomment-5617636145

Reply via email to