ArrayStoreException: bug or expected behavior?

Tobias Hartmann tobias.hartmann at oracle.com
Fri Jul 26 11:06:27 UTC 2019


Hi Michael,

thanks for trying out inline types!

I just had a quick look at this but when removing the "inline" from Point2D and executing with
latest Java, you get an ArrayStoreException exception as well (and no compile-time warning/error).

So if I don't miss anything, this isn't specific to inline types and therefore expected behavior.

Best regards,
Tobias

On 26.07.19 12:36, Michael Hoffer wrote:
> Hi all,
> 
> I finally found the time to play with the newest Valhalla build. We have a lot of use cases for this in the scientific community. Thanks for working on it.
> 
> I prepared a small test program that throws an ArrayStoreException during the assignment of an "inline value" to an array. I wanted to test the behavior of casting between "inline" and the nullable "?" type and interfaces. 
> 
> My expectations are that such errors should be prevented by the type system and should be discovered at compile-time. Either Point2D shouldn’t be allowed to implement the Point2DI interface (hopefully, that’s not the case) or the assignment of the points-array with an array of "inline values“ should be prevented (which is better).
> 
> Is this a bug or the expected behavior of the preview build?
> 
> Regards,
> Michael
> 
> --
> Dr. Michael Hoffer
> 
> Web:    mihosoft.eu
> Twitter: @mihosoft
> 
> Goethe-Zentrum für Wissenschaftliches Rechnen (G-CSC)
> Goethe-Universität
> Kettenhofweg 139
> 60325 Frankfurt am Main
> phone: +49 69 798 25254
> info at michaelhoffer.de
> 
> 
> /**
>  * <p>
>  * <b>How to reproduce the behavior/potential bug:</b>  
>  * 
>  * Compile this code with <b>jdk-14-valhalla+1-8 (2019/7/4)</b>:
>  * 
>  * <pre>
>  * javac Main.java && java Main
>  * </pre>
>  * 
>  * </p>
>  * <p>
>  * <b>Actual behavior:</b> a java.lang.ArrayStoreException is thrown
>  * unexpectedly in line 33. 
>  * </p>
>  * <p>
>  * <b>Expected behavior:</b> compile-time error that prevents the problematic
>  * assignment in line 30.
>  * </p>
>  * 
>  * @author Michael Hoffer <info at michaelhoffer.de>
>  */
> public class Main {
>     public static void main(String[] args) {
> 
>         int n = 100_000_000;
> 
>         System.out.println("> creating " + n + " points");
> 
>         Point2DI[] points = new Point2D[n];
> 
>         for(int i = 0; i < points.length;i++) {
>             points[i] = new Point2DCls(i, i);
>         }
>     }
> 
>     static interface Point2DI {
>         double getX();
>         double getY();
>     }
>     
>     static inline class Point2D implements Point2DI {
>         public double x;
>         public double y;
> 
>         Point2D(double x, double y) {
>             this.x = x;
>             this.y = y;
>         }
> 
>         @Override
>         public double getX() {
>             return x;
>         }
> 
>         @Override
>         public double getY() {
>             return y;
>         }
>     }
> 
>     static class Point2DCls implements Point2DI {
>         public double x;
>         public double y;
> 
>         Point2DCls(double x, double y) {
>             this.x = x;
>             this.y = y;
>         }
> 
>         @Override
>         public double getX() {
>             return x;
>         }
> 
>         @Override
>         public double getY() {
>             return y;
>         }
>     }
> } // end class Main
> 
> 
> 
>  
> 
> 
> 



More information about the valhalla-dev mailing list