On Fri, 6 Mar 2026 04:44:51 GMT, Quan Anh Mai <[email protected]> wrote:

>> Hi,
>> 
>> Reflective construction of value object triggers assert in C2 because it 
>> does not follow the normal object construction pattern and is technically UB 
>> because we try to return a larval object from a method. I was told that this 
>> is required for the construction of hidden classes, but to me it seems like 
>> we put those restrictions on ourselves and shoot ourselves in the foot by 
>> using these `Unsafe` hacks.
>> 
>> This PR tries to fix this issue by letting the compiler know of these 
>> methods which can return or accept larval objects. Note that this is pretty 
>> fragile, and seemingly harmless changes to the code shape generated by the 
>> `MethodHandle` mechanism can break it, which is a usual symptom of undefined 
>> behaviour.
>> 
>> Please take a look and leave your review, thanks a lot.
>
> Quan Anh Mai has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   rename

Otherwise, looks good, thanks!

src/hotspot/share/ci/ciMethod.hpp line 400:

> 398: 
> 399:   // Generally, a method cannot return a larval object or receive a 
> larval argument. There are some
> 400:   // exceptions.

Can you also give a description about the exceptions here? Maybe you can also 
move it to the definition to easier follow the cases outlined.

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

Marked as reviewed by chagedorn (Committer).

PR Review: 
https://git.openjdk.org/valhalla/pull/2204#pullrequestreview-3927341533
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2204#discussion_r2916284867

Reply via email to