Nothing is flat! Well... sometimes, things are. But not arrays! Ok, arrays can 
be flat... but you can never be sure an array is flat from its unrefined type 
(and current JVM flags). Indeed, the "new" `ValueClass::newReferenceArray`: 
this allows to bypass `ObjArrayKlass::array_layout_selection(Klass*, 
ArrayProperties)` and get an array of references from any value class, 
regardless of the available layouts, thus fooling 
`InlineKlass::is_always_flat_in_array()`. In general, we can ensure the 
flatness of an array in only few situations: if we see the allocation, or after 
having tested the flatness with a runtime check. Thus 
`InlineKlass::is_always_flat_in_array()` doesn't really make sense... And 
consequently, it is not correct for 
`TypePtr::compute_flat_in_array(ciInstanceKlass* instance_klass, bool 
is_exact)` to ever return `Flat`. Yet, we still need the constructor `Flat` in 
`FlatInArray`. For instance, it is used in 
`TypeInstPtr::cast_to_flat_in_array()` which is indirectly used
 (through `load_from_unknown_flat_array`) in the "flat array" branch of 
`Parse::array_load(BasicType bt)`:

https://github.com/openjdk/valhalla/blob/a918cc9f5f8dcc35f4f73ed19b439a033fb39883/src/hotspot/share/opto/parse2.cpp#L121-L143

But here, casting to flat is fine since we are under a runtime check that 
enforces that the array is indeed flat.

Fortunately, I don't think the current usage could have lead to an error: we 
only use it to compare types: if one is sure to be flat but not the other one, 
the types can't be the same. It's fine, even if the "sure to be flat" criterion 
is buggy. Would work with a bit anything. Like "if a type starts with the 
letter 'A', but the other by the letter 'B', they can't be the same". If we had 
any tracking of that, it would allow to (very weirdly) prove type inequality 
even with imprecise types...

Thanks,
Marc

---------
- [x] I confirm that I make this contribution in accordance with the [OpenJDK 
Interim AI Policy](https://openjdk.org/legal/ai).

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

Commit messages:
 - Remove dead code
 - naive removal

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

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

Reply via email to