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. ------------- Commit messages: - 8354323: Safeguard SwitchBootstraps.typeSwitch when used outside the compiler Changes: https://git.openjdk.org/jdk/pull/25090/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25090&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8354323 Stats: 33 lines in 2 files changed: 27 ins; 0 del; 6 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