RFR: 8281100: Spurious "variable might not have been initialized" with sealed class switch

Jan Lahoda jlahoda at openjdk.java.net
Thu Feb 10 12:48:08 UTC 2022


On Wed, 9 Feb 2022 23:03:11 GMT, Vicente Romero <vromero at openjdk.org> wrote:

> this test case is failing for me, I was expecting it to compile:
> 
> ```
> sealed interface I permits A, B {}
> 
> final class A implements I {}
> 
> final class B implements I {}
> 
> class Test {
>     void m(I i) {
>         int data;
>         switch (i) {
>             case A a -> data = 0;
>             case B b -> data = 0;
>         };
>         System.err.println(data);
>     }
> }
> ```

Hm, seems to work for me with this patch?

~/src/jdk/jdk (JDK-8281100) $ cat /tmp/Test.java 
sealed interface I permits A, B {}

final class A implements I {}

final class B implements I {}

class Test {
    void m(I i) {
        int data;
        switch (i) {
            case A a -> data = 0;
            case B b -> data = 0;
        };
        System.err.println(data);
    }
}
~/src/jdk/jdk (JDK-8281100) $ ./build/linux-x86_64-server-release/jdk/bin/javac --enable-preview -source 19 /tmp/Test.java 
Note: /tmp/Test.java uses preview features of Java SE 19.
Note: Recompile with -Xlint:preview for details.
~/src/jdk/jdk (JDK-8281100) $ git push origin JDK-8281100
Everything up-to-date

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

PR: https://git.openjdk.java.net/jdk/pull/7402


More information about the compiler-dev mailing list