On Fri, 16 Jan 2026 13:31:16 GMT, Marc Chevalier <[email protected]> wrote:

> Some code added by [JDK-8372700](https://bugs.openjdk.org/browse/JDK-8372700) 
> can compute the constant value of a field of a (flatten) element in a flat 
> array. We get a crash when the element of the array is known to be `null`, 
> and so the field doesn't exist.
> 
> So, let's just check in `ciConstant ciFlatArray::field_value(int index, 
> ciField* field)` whether we get a null constant before interpreting it as a 
> `ciInstance` and trying to retrieve a field from there. This should be enough 
> since a `ciObject` is (directly) derived by `ciNullObject`, `ciInstance` and 
> `ciArray`. Since we are looking up a value of a flat array, an element cannot 
> be a `ciArray` (arrays have identities and can't be contained in a flat 
> array). After looking up whether the flat array element is null, the 
> `obj->as_instance()` cast acts as an assert, should we ever add another 
> derived class from `ciObject`.
> 
> In case of a null array element, `field_value` simply returns an invalid 
> `ciConstant`.
> 
> Tested with 
> tier1,tier2,tier3,hs-precheckin-comp,hs-comp-stress,valhalla-comp-stress. 
> Looks good.
> 
> Thanks,
> Marc

src/hotspot/share/ci/ciFlatArray.cpp line 136:

> 134: 
> 135: ciConstant ciFlatArray::field_value(int index, ciField* field) {
> 136:   auto get_field_from_object_constant = [field](const ciConstant& v) -> 
> ciConstant {

I don't really agree with this fix, `ciFlatArray::field_value` should be 
dumber, it is the caller who knows that we do not fold the load if the element 
is `null`, the callee should just return the field as it is.

src/hotspot/share/opto/type.cpp line 414:

> 412: 
> 413:   if (con.is_valid() &&          // not a mismatched access
> 414:       !con.is_null_or_zero()) {  // not a default value

This is incorrect, the value is not constant if the element of the array is 
`null`, not if the field we retrieved is `null`.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1923#discussion_r2707955712
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1923#discussion_r2707940249

Reply via email to