RFR: 8328536: javac - crash on unknown type referenced in yield statement [v2]
Jan Lahoda
jlahoda at openjdk.org
Fri May 17 12:21:03 UTC 2024
On Thu, 28 Mar 2024 08:37:00 GMT, Hannes Greule <hgreule at openjdk.org> wrote:
>> Pasting e.g.
>>
>> I m(I i, int x) {
>> return switch (x) {
>> default -> i;
>> };
>> }
>>
>> in jshell will cause a crash if `I` is not declared already. This comes down to javac not creating an error type for the value of the (implicit) yield from the switch.
>>
>> Javac will not crash but swallow the exception, and create a file containing the command line options.
>>
>> I first thought about just checking for null of the type here https://github.com/openjdk/jdk/blob/9ca4ae3d3b746f1d75036d189ff98f02b73b948f/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java#L1640 but after a closer look, the `checkIdInternal` method seems a better fit, as it also updates the type normally.
>
> Hannes Greule has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:
>
> - Merge branch 'refs/heads/master' into fix/switch-yield-unknown-type-crash
> - add bug id
> - Fix jshell crash on unknown type in switch yield
We've discussed with @mcimadamore offline, and changing the output for `T7188968` based on the change I've suggested yesterday is probably OK. I am pretty sure the output for the other two tests is better (more correct) with the suggested change. So, if possible, I would suggest to go with the that change, adjusting the tests.
Thanks!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18383#issuecomment-2117475781
More information about the compiler-dev
mailing list