RFR: 8328536: javac - crash on unknown type referenced in yield statement [v4]

Chen Liang liach at openjdk.org
Wed Jun 26 23:20:15 UTC 2024


On Thu, 6 Jun 2024 16:56:53 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 pull request now contains eight commits:
> 
>  - Merge branch 'master' into fix/switch-yield-unknown-type-crash
>    
>    # Conflicts:
>    #	test/langtools/tools/javac/recovery/AttrRecovery.java
>  - add testcase
>  - Don't bail out early on erroneous type, adjust tests
>  - Merge branch 'master' into fix/switch-yield-unknown-type-crash
>  - Merge branch 'master' into fix/switch-yield-unknown-type-crash
>  - Merge branch 'refs/heads/master' into fix/switch-yield-unknown-type-crash
>  - add bug id
>  - Fix jshell crash on unknown type in switch yield

langtools tier 1+2 tests pass.

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

PR Comment: https://git.openjdk.org/jdk/pull/18383#issuecomment-2192772731


More information about the compiler-dev mailing list