> 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

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/25090/files
  - new: https://git.openjdk.org/jdk/pull/25090/files/7b030bee..a7c4e398

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=25090&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=25090&range=01-02

  Stats: 15 lines in 2 files changed: 0 ins; 5 del; 10 mod
  Patch: https://git.openjdk.org/jdk/pull/25090.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25090/head:pull/25090

PR: https://git.openjdk.org/jdk/pull/25090

Reply via email to