Switch-expression with nested try

Jan Lahoda jan.lahoda at oracle.com
Tue Nov 20 12:13:40 UTC 2018


Hi Tagir,

Thanks for the report, I've filled it here:
https://bugs.openjdk.java.net/browse/JDK-8214114

Jan

On 20.11.2018 10:49, Tagir Valeev wrote:
> Hello!
>
> Switch expression with nested try is a weird beast. I was wondering
> how you managed to compile it. Seems it's still problematic. Code:
>
> public class Java12Test {
>    public static void main(String[] args) {
>      System.out.println(switch(0) {
>        default -> {
>          try { throw new Exception(); }
>          catch(Exception ex) {
>            break 1;
>          }
>        }
>      });
>    }
> }
>
>> "C:\Program Files\Java\jdk-12\bin\java.exe" -version
> openjdk version "12-ea" 2019-03-19
> OpenJDK Runtime Environment (build 12-ea+20)
> OpenJDK 64-Bit Server VM (build 12-ea+20, mixed mode, sharing)
>
>> "C:\Program Files\Java\jdk-12\bin\javac.exe" --enable-preview --release=12 Java12Test.java
> Note: Java12Test.java uses preview language features.
> Note: Recompile with -Xlint:preview for details.
>
>> "C:\Program Files\Java\jdk-12\bin\java.exe" --enable-preview Java12Test
> Error: Unable to initialize main class Java12Test
> Caused by: java.lang.VerifyError: Stack map does not match the one at
> exception handler 24
> Exception Details:
>    Location:
>      Java12Test.main([Ljava/lang/String;)V @16: new
>    Reason:
>      Current frame's stack size doesn't match stackmap.
>    Current Frame:
>      bci: @16
>      flags: { }
>      locals: { '[Ljava/lang/String;' }
>      stack: { 'java/lang/Exception' }
>    Stackmap Frame:
>      bci: @24
>      flags: { }
>      locals: { '[Ljava/lang/String;' }
>      stack: { 'java/io/PrintStream', 'java/lang/Exception' }
>    Bytecode:
>      0000000: b200 0203 ab00 0000 0000 000c 0000 0000
>      0000010: bb00 0359 b700 04bf 4d04 3ca7 0003 1bb6
>      0000020: 0005 b1
>    Exception Handler Table:
>      bci [16, 24] => handler: 24
>    Stackmap Table:
>      same_locals_1_stack_item_frame(@16,Object[#15])
>      full_frame(@24,{Object[#16]},{Object[#15],Object[#3]})
>      full_frame(@30,{Object[#16],Integer},{Object[#15]})
>
> With best regards,
> Tagir Valeev
>


More information about the compiler-dev mailing list