RFR: 8236850: Operations on constant List/Set.of(element) instances does not consistently constant fold

forax at univ-mlv.fr forax at univ-mlv.fr
Sat Jan 11 11:59:12 UTC 2020


> De: "John Rose" <john.r.rose at oracle.com>
> À: "Remi Forax" <forax at univ-mlv.fr>
> Cc: "Claes Redestad" <claes.redestad at oracle.com>, "core-libs-dev"
> <core-libs-dev at openjdk.java.net>
> Envoyé: Samedi 11 Janvier 2020 02:23:50
> Objet: Re: RFR: 8236850: Operations on constant List/Set.of(element) instances
> does not consistently constant fold

> On Jan 10, 2020, at 10:47 AM, Remi Forax < [ mailto:forax at univ-mlv.fr |
> forax at univ-mlv.fr ] > wrote:

>> Seem to be a JIT bug to me,
>> the fields of Set12 are declared final not @Stable (even if the field storing
>> the instanceof of Set&2 itself is marked @Stable) so there is no reason not not
>> let the constant folding happen.

> It’s part of the contract of @Stable that default values (null) are not
> inlined. The reason for this is that some @Stable variables are lazy,
> and the JIT needs to avoid assuming that default values stay that
> way forever.

My bad, reading the patch i've not seen that the fields were both annotated with final *and* @Shared. 

So it's another occurrence of final not meaning true final but instead of having an annotation @TrueScottmanFinal, 
this patch try to use @Stable but it doesn't work if the field is null, so the code is twisted to consider 'this' as a marker for null. 

In my opinion, it's better to introduce an annotation @TrueScottmanFinal instead of using @Stable in a way it was not designed to be used. 

cheers, 
Rémi 


More information about the core-libs-dev mailing list