Crash in valhalla

Remi Forax forax at univ-mlv.fr
Tue Sep 15 21:54:59 UTC 2020


Hi Martijn,
obviously the VM should not crash,
the issue is that an inline class (MyInlineClass) at bytecode level should not have an instance method named <init> but a static method named <init>,
and use defaultvalue + withfield instead of invokespecial <init>() + putfield.

@Tobias, it seems that if an inline class doesn't have a static method <init>, the VM crash.

Using javap, your code is
public value class MyInlineClass {
  private final int i;

  public int i();
    Code:
       0: aload_0
       1: getfield      #13                 // Field i:I
       4: ireturn

  public MyInlineClass(int);     // <---------- WRONG
    Code:
       0: aload_0
       1: iload_1
       2: putfield      #13                 // Field i:I
       5: aload_0
       6: invokespecial #20                 // Method java/lang/Object."<init>":()V
       9: return
}



but it should be
public final value class MyInlineClass {
  private final int i;

  public int i();
    Code:
       0: aload_0
       1: getfield      #3                  // Field i:I
       4: ireturn

  public static MyInlineClass(int);   <---- the method is static here
    Code:
       0: defaultvalue  #1                  // class MyInlineClass
       3: astore_1
       4: iload_0
       5: aload_1
       6: swap
       7: withfield     #3                  // Field i:I
      10: astore_1
      11: aload_1
      12: areturn
}

as a side note, you don't have to generate the instruction swap in the static method <init>, it's an artefact of javac.

regards,
Rémi

----- Mail original -----
> De: "Martijn Hoekstra" <martijnhoekstra at gmail.com>
> À: "Tobias Hartmann" <tobias.hartmann at oracle.com>
> Cc: "valhalla-dev" <valhalla-dev at openjdk.java.net>
> Envoyé: Mardi 15 Septembre 2020 17:59:08
> Objet: Re: Crash in valhalla

>>
>>
>> Hi Martijn,
>>
>> Thanks for trying out Valhalla!
>>
>> On 15.09.20 17:17, Martijn Hoekstra wrote:
>> > Are reports of these kinds of things valuable yet? If so, where/how can I
>> > report it?
>>
>> Yes, such feedback is very much appreciated. Feel free to simply share
>> the details here (maybe upload the hs_err* file and reproducer somewhere
>> and send the link).
>>
>> Thanks,
>> Tobias
>>
> 
> Hi Tobias,
> 
> Thanks for the quick response.
> 
> I have a link with log, dump and class files here:
> https://1drv.ms/u/s!Aukg503a2UkIg9NFE7NcQOFg_oKvOQ?e=NnpPCW



More information about the valhalla-dev mailing list