This repository was archived by the owner on Sep 19, 2023. It is now read-only.
8302202: Incorrect desugaring of null-allowed nested patterns #7
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Original PR:
openjdk/jdk#12572
Original PR description:
Considering code like:
javac will try to factor-out the common prefix, i.e.
R1
, and produce something along these lines:The problem with this code is that both cases in the nested switch must match
null
, but the bootstrap protocol only allows one case to matchnull
(theSwitchBootstraps.typeSwitch
method will return-1
fornull
). So this translation is broken, and will not match the first case if the component isnull
.There are multiple ways to solve this problem, but the proposal here is change the way we accumulate the cases from which we factor out the common prefix, by stopping the accumulation after the first nullable case.
Another related issue is that when factoring out the common prefix, if the last case in the nested switch is has an unconditional pattern, but also has a guard, we need to generate a default to continue properly in the outer switch. Currently, the default is not generated when there's an unconditional pattern in the case, despite having a guard, and hence the case as a whole is not unconditional.
Progress
Issue
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk20u pull/7/head:pull/7
$ git checkout pull/7
Update a local copy of the PR:
$ git checkout pull/7
$ git pull https://git.openjdk.org/jdk20u pull/7/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 7
View PR using the GUI difftool:
$ git pr show -t 7
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk20u/pull/7.diff