On Tue, 2 Dec 2025 02:29:28 GMT, Vladimir Ivanov <[email protected]> wrote:

>> So an `AccessDescriptor` is created for each sigpoly VH site in the source 
>> code. Usually it is `VH.operation()`, but it is legal to use a non-constant 
>> VarHandle variable and call an operation on that. If `constant == 
>> MethodHandleImpl.CONSTANT_NO`, we are sure that we have the non-constant 
>> case, so we cannot trust that cached method handle, and there is no point 
>> further caching. We can only read that previous MH conversion cache if 
>> `constant == MethodHandleImpl.CONSTANT_YES` because this means our cache is 
>> always correct.
>
> So, it seems like what you are trying to achieve is a 1-1 mapping from 
> `AccessDescriptor` to `vh` through `adaptedMh`. So, once `cache != null` you 
> can trust that it corresponds to the `vh` instance passed as a constant. But 
> cache pollution can easily break the invariant, so you try to eliminate the 
> pollution by avoiding cache updates when vh is not constant. Do I get it 
> right?

No. The avoidance of cache update simply trims down the generated code by 
throwing away the meaningless cache update.

The access to cache is already safeguarded by `constant == 
MethodHandleImpl.CONSTANT_YES`. I should have moved `var cache = adaptedMh;` 
into the if block of `constant == CONSTANT_YES`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2579405388

Reply via email to