Record Pattern with swich has something wrong

Angelos Bimpoudis angelos.bimpoudis at oracle.com
Fri Mar 24 15:46:08 UTC 2023


Thanks for the new failing test case. While the previous was passing in mainline, this one is indeed failing in both 20 and mainline. We will look into it.

Aggelos
________________________________
From: amber-dev <amber-dev-retn at openjdk.org> on behalf of Holo The Sage Wolf <holo3146 at gmail.com>
Sent: 24 March 2023 16:10
To: Blaise B. <blaisebass at gmail.com>; amber-dev <amber-dev at openjdk.org>
Subject: Re: Record Pattern with swich has something wrong

It is odd that something like this is not a test-case already

On Fri, Mar 24, 2023, 17:59 Blaise B. <blaisebass at gmail.com<mailto:blaisebass at gmail.com>> wrote:
Hello!

I could still reproduce the bug on JDK 21 EA (openjdk-21-ea+15_windows-x64_bin) with a slightly different code:

public class Main {
       record Foo(Object first, Object second) {}

       public static void main(String[] args) {
               Foo myfoo = new Foo(42, "millis");

               switch (myfoo) {
                   case Foo(Integer d, String s)  -> System.out.println("got integer and string: " + d + ", " + s);
                   case Foo(Object fs, Object sc) -> System.out.println("values: " + fs + ", " + sc);
              }
       }
}


>javac --release 21 --enable-preview Main.java
Note: Main.java uses preview features of Java SE 21.
Note: Recompile with -Xlint:preview for details.


>java --enable-preview Main
Error: Unable to initialize main class Main
Caused by: java.lang.VerifyError: Bad local variable type
Exception Details:
  Location:
    Main.main([Ljava/lang/String;)V @192: aload
  Reason:
    Type top (current frame, locals[8]) is not assignable to reference type
  Current Frame:
    bci: @192
    flags: { }
    locals: { '[Ljava/lang/String;', 'Main$Foo', 'Main$Foo', integer, 'Main$Foo', top, top, 'java/lang/Object', top, 'java/lang/Object', integer }
    stack: { 'java/io/PrintStream', 'java/lang/String' }
  Bytecode:
    0000000: bb00 0759 05b8 0009 120f b700 114c 2b59
    0000010: b800 1457 4d03 3e2c 1dba 001a 0000 ab00
    0000020: 0000 0012 0000 0001 0000 0000 0000 001c
    0000030: bb00 1e59 0101 b700 20bf 2c3a 0419 04b6
    0000040: 0023 3a09 0336 0a19 0915 0aba 0027 0000
    0000050: aa00 0000 0000 0080 ffff ffff 0000 0001
    0000060: 0000 0054 0000 001c 0000 0054 1909 c000
    0000070: 0a3a 0519 04b6 0028 3a0b 190b c100 2b99
    0000080: 000d 190b c000 2b3a 06a7 0009 0436 0aa7
    0000090: ffb8 b200 2d19 0519 06ba 0033 0000 b600
    00000a0: 37a7 0034 1909 3a07 1907 c600 0e19 04b6
    00000b0: 0028 3a0b 190b 3a08 b200 2d19 07b8 003d
    00000c0: 1908 b800 3dba 0040 0000 b600 37a7 0008
    00000d0: 043e a7ff 45a7 0011 4dbb 001e 592c b600
    00000e0: 452c b700 20bf b1
  Exception Handler Table:
    bci [63, 66] => handler: 216
    bci [117, 120] => handler: 216
    bci [175, 178] => handler: 216
  Stackmap Table:
    append_frame(@23,Object[#7],Object[#7],Integer)
    same_frame(@48)
    same_frame(@58)
    full_frame(@71,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Top,Top,Top,Top,Object[#2],Integer},{})
    same_frame(@108)
    full_frame(@140,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Object[#10],Top,Top,Top,Object[#2],Integer},{})
    full_frame(@146,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Object[#10],Object[#43],Top,Top,Object[#2],Integer},{})
    full_frame(@164,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Top,Top,Top,Top,Object[#2],Integer},{})
    full_frame(@184,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Top,Top,Object[#2],Top,Object[#2],Integer},{})
    full_frame(@208,{Object[#80],Object[#7],Object[#7],Integer,Object[#7],Top,Top,Top,Top,Object[#2],Integer},{})
    full_frame(@213,{Object[#80],Object[#7]},{})
    full_frame(@216,{Object[#80]},{Object[#67]})
    append_frame(@230,Object[#7])
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20230324/b0956e8e/attachment-0001.htm>


More information about the amber-dev mailing list