hg: valhalla/valhalla: 8198748: [lworld] Javac should insert null checks at casts to value types.
Remi Forax
forax at univ-mlv.fr
Mon Mar 12 06:59:07 UTC 2018
Hi Srikanth,
thanks for doing that.
There is already a code path in the compiler to generate nullchecks using getClass() + pop,
i think you should reuse this code instead of adding another way to do a nullcheck.
And with my hat of backporter/bytecode analyzer writer, adding a new runtime dependency, here, to Objects.requireNonNull, makes things more complex because some analyzers may have to be enhanced to recognize this new pattern.
cheers,
Rémi
----- Mail original -----
> De: "Srikanth" <srikanth.adayapalam at oracle.com>
> À: "valhalla-dev" <valhalla-dev at openjdk.java.net>
> Envoyé: Lundi 12 Mars 2018 07:32:13
> Objet: Re: hg: valhalla/valhalla: 8198748: [lworld] Javac should insert null checks at casts to value types.
> On Monday 12 March 2018 11:51 AM, srikanth.adayapalam at oracle.com wrote:
>> Changeset: 7c1c51c340e6
>> Author: sadayapalam
>> Date: 2018-03-12 11:46 +0530
>> URL: http://hg.openjdk.java.net/valhalla/valhalla/rev/7c1c51c340e6
>>
>> 8198748: [lworld] Javac should insert null checks at casts to value types.
>
> Notes:
>
> Where Point is a value type, code generated for casting an object to
> Point as in:
>
> Object o = ...
>
> Point p = (Point) o;
>
> is:
>
> 2: aload_1
> 3: dup
> 4: invokestatic #2 // Method
> java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
> 7: pop
> 8: checkcast #3 // class Point
> 11: astore_2
>
> If the cast occurs in source code compiled at a level where value types
> are not recognized as such, then there is no insertion of null check.
>
> (FWIW, Javac is not in the business of nullness tracking, so these
> checks will be inserted even where a cursory glance of source code
> context could inform a reader that no null check would be needed)
>
> Thanks
> Srikanth
>
>>
>> ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java
>> ! src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java
>> + test/langtools/tools/javac/valhalla/lworld-values/CastNoNullCheckTest.java
>> + test/langtools/tools/javac/valhalla/lworld-values/CastNullCheckTest.java
More information about the valhalla-dev
mailing list