On 2/11/26 05:00, Axel Boldt-Christmas wrote:
On Tue, 10 Feb 2026 17:40:30 GMT, Frederic Parain <[email protected]> wrote:

Axel Boldt-Christmas has updated the pull request incrementally with one 
additional commit since the last revision:

   Remove incorrect assert. JVM_CopyOfSpecialArray is currently broken
src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp line 2681:

2679:         if (entry->is_flat()) {
2680:           CALL_VM(InterpreterRuntime::write_flat_field(THREAD, obj, val, 
entry), handle_exception);
2681:         } else {
The case of null-free arrays was added above, it would be nice to also add the 
support for null-free non-flat fields, even if they are not part of JEP 401.
I guess `is_null_free_inline_type` is the correct property here. I did not 
realise that `@NullRestricted` was only applicable for fields holding value 
types.

Yes, in the case where the field is not flat, `is_null_free_inline_type` should be tested to see if a null check is required.

Valueness and nullfreeness have been tied together for a very long time in project Valhalla. We will eventually update the to see them at two distinct properties, so null-freeness could be applied to identity types too. But this is beyond the scope of JEP 401, so we have deferred this change.

There's a work in progress in the bang-world prototype to implement this split.


src/hotspot/share/oops/inlineKlassPayload.inline.hpp line 419:

417: }
418:
419: inline void FlatValuePayload::copy_from_non_null(BufferedValuePayload& 
src) {
`copy_from_non_null` looks a bit weird here, because the method does something 
more precise: copying from a buffered value, which implies 1) the src is never 
null and 2) the method is allowed to update the null-marker.
`copy_from_buffered` looks like a better name to express what the method does.
I did originally call it `copy_from` (buffer is implied by the argument type). 
But when I still used the null_reset (null payload) which is a Buffer which is 
representing null it was invalid if you called this method. But after removing 
using the null_payload it can probably be renamed back `copy_from`.

Also your comment made me realise that the use in `FlatArrayKlass::copy_array` 
was wrong. It should not have called `copy_from_non_null` if the `copy_to` call 
failed. Pushed a fix and renamed the function.

Will also look at removing the changes w.r.t. null reset value in this change. 
We should not really use it in the runtime code. Because trying to use that oop 
with `write` or `copy_from` is incorrect. (Might even add an assert for it, 
there should only ever be one such object per InlineKlass)

src/hotspot/share/oops/inlineKlassPayload.inline.hpp line 496:

494:                                           InstanceKlass* klass)
495:     : FlatFieldPayload(container,
496:                        klass->field_offset(field_descriptor->index()),
klass->field_offset() is an expensive call, because it decodes the FieldInfoStream 
to get the field offset. The fieldDescriptor argument has a cheaper way to get the 
field offset: field_descriptor->offset().
Right.  Sounds good. Just used the same code we already had in the 
`jni_[Set|Get]ObjectField`. But we already walked the field stream to find the 
field info, let us not walk the field stream again.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2068#discussion_r2792012654
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2068#discussion_r2791736640
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2068#discussion_r2791820213

Reply via email to