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