RFR: 8314226: Series of colon-style fallthrough switch cases with guards compiled incorrectly [v2]
Aggelos Biboudis
abimpoudis at openjdk.org
Fri Sep 1 12:24:40 UTC 2023
> The `switch` structure is translated in `handleSwitch` where we rewrite pattern matching switches. In some occasions a switch has multiple cases with multiple patterns where the n-th case does not complete normally and falls through to the n+1-st case:
>
>
> switch (obj) {
> case Integer _ when ((Integer) obj) > 0:
> case String _ when !((String) obj).isEmpty():
> return 1;
> default:
> return -1;
> }
>
>
> This PR addresses that by translating the second case correctly and also replicates the body of the latter to the former (which we can do because no bindings are introduced in either statement blocks by the definition of unnamed variables.).
>
> Previously the code was translated into:
>
>
> switch (java.lang.runtime.SwitchBootstraps.typeSwitch(selector0$temp, index$1)) {
> case 0:
> Integer _;
> if (!(true && ((Integer)obj) > 0)) {
> index$1 = 1;
> continue;
> }
>
> case 1 when !((String)obj).isEmpty():
> return 1;
>
> default:
> return -1;
> }
>
>
> This PR adjusts the translation into:
>
>
> switch (java.lang.runtime.SwitchBootstraps.typeSwitch(selector0$temp, index$1)) {
> case 0:
> Integer _;
> if (!(true && ((Integer)obj) > 0)) {
> index$1 = 1;
> continue;
> }
> return 1;
>
> case 1:
> String _;
> if (!((selector0$temp instanceof String || false) && (true && !((String)obj).isEmpty()))) {
> index$1 = 2;
> continue;
> }
> return 1;
> }
Aggelos Biboudis has updated the pull request incrementally with one additional commit since the last revision:
Address review
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/15532/files
- new: https://git.openjdk.org/jdk/pull/15532/files/09db2c7b..18f52d17
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=15532&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=15532&range=00-01
Stats: 5 lines in 1 file changed: 0 ins; 5 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/15532.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15532/head:pull/15532
PR: https://git.openjdk.org/jdk/pull/15532
More information about the compiler-dev
mailing list