On Tue, 13 May 2025 09:56:31 GMT, Aggelos Biboudis <abimpou...@openjdk.org> 
wrote:

>> While the compiler does not allow invalid queries to flow into 
>> `SwitchBootstraps:typeSwitch`, a library user could do that and `typeSwitch` 
>> does not prevent such usage pattern errors resulting in erroneous evaluation.
>> 
>> For example this is not valid Java (and protected) by javac:
>> 
>> 
>> byte b = 1;
>> switch (b) {
>>     case String s -> System.out.println("How did we get here? byte is " + 
>> s.getClass());
>> }
>> 
>> 
>> but this is a valid call (and not protected):
>> 
>> 
>> CallSite shortSwitch = SwitchBootstraps.typeSwitch(
>>     MethodHandles.lookup(), 
>>     "", 
>>     MethodType.methodType(int.class, short.class, int.class),  // models 
>> (short, int) -> int
>>     String.class);
>> 
>> 
>> The `SwitchBootstraps.typeSwitch` returns wrong result since the code was 
>> reasoning erroneously that this pair was unconditionally exact. 
>> 
>> This PR proposes to add the safety check in unconditional exactness which 
>> will return false in erroneous pairs and then the actual check will be 
>> delegated to `instanceof`. For the case of erroneous pairs with primitive 
>> `boolean`s there is a check in the beginning of the type switch skeleton.
>
> Aggelos Biboudis has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Simplify unconditional exactness in both Types and SwitchBootstraps

Looks reasonable to me.

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

Marked as reviewed by jlahoda (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/25090#pullrequestreview-2856549641

Reply via email to