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

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

Commit messages:
 - Shield against null

Changes: https://git.openjdk.org/valhalla/pull/1923/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=1923&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8375441
  Stats: 25 lines in 2 files changed: 15 ins; 5 del; 5 mod
  Patch: https://git.openjdk.org/valhalla/pull/1923.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1923/head:pull/1923

PR: https://git.openjdk.org/valhalla/pull/1923

Reply via email to