Switch-expression with nested try (original) (raw)

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: samelocals1stackitemframe(@16,Object[#15]) fullframe(@24,{Object[#16]},{Object[#15],Object[#3]}) fullframe(@30,{Object[#16],Integer},{Object[#15]}) With best regards, Tagir Valeev



More information about the compiler-dev mailing list