[condy-folding] Condy CP entries deduplication?

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Oct 16 10:47:24 UTC 2017


Seems like a bug

Thanks
Maurizio


On 16/10/17 11:33, Tagir Valeev wrote:
> Hello!
>
> Still playing with condy. Very simple program:
>
> import java.lang.invoke.*;
>
> public class Condy {
>    public static void main(String[] args) {
>      Object o1 = Intrinsics.ldc(ConstantRef.ofNull());
>      Object o2 = Intrinsics.ldc(ConstantRef.ofNull());
>    }
> }
>
> I thought that only one CP entry will be created for both dynamic
> constants, however in fact two separate entries are created, despite
> they refer to the same NameAndType and the same BSM:
>
> $ javac -XDdoConstantFold Condy.java
> $ javap -v Condy
> ...
> public class Condy
> ...
> Constant pool:
>     #1 = Methodref          #5.#14         // java/lang/Object."<init>":()V
>     #2 = ConstantDynamic    #0:#17         // #0:_:Ljava/lang/Object;
>     #3 = ConstantDynamic    #0:#17         // #0:_:Ljava/lang/Object;
> ...
> {
> ...
>    public static void main(java.lang.String[]);
>      descriptor: ([Ljava/lang/String;)V
>      flags: (0x0009) ACC_PUBLIC, ACC_STATIC
>      Code:
>        stack=1, locals=3, args_size=1
>           0: ldc           #2                  // ConstantDynamic
> #0:_:Ljava/lang/Object;
>           2: astore_1
>           3: ldc           #3                  // ConstantDynamic
> #0:_:Ljava/lang/Object;
>           5: astore_2
>           6: return
>        LineNumberTable:
>          line 5: 0
>          line 6: 3
>          line 7: 6
> }
> ...
> BootstrapMethods:
>    0: #16 REF_invokeStatic
> java/lang/invoke/Bootstraps.defaultValue:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
>      Method arguments:
>
> Is this intended behavior or implementation bug? If I remember
> correctly, discussions regarding this topic ended in merging equal CP
> entries, but probably I'm missing something.
>
> Thanks,
> Tagir Valeev.



More information about the amber-dev mailing list