diff --git a/library/src/scala/IArray.scala b/library/src/scala/IArray.scala index 50d40b6f2f19..c5679ae7aaf9 100644 --- a/library/src/scala/IArray.scala +++ b/library/src/scala/IArray.scala @@ -249,9 +249,11 @@ object IArray: extension [T](arr: IArray[T]) def takeWhile(p: T => Boolean): IArray[T] = genericArrayOps(arr).takeWhile(p) - /** Returns a mutable copy of this immutable array. */ - extension [T](arr: IArray[T]) def toArray: Array[T] = - arr.clone.asInstanceOf[Array[T]] + extension [T](arr: IArray[T]) + /** Returns a mutable copy of this immutable array. */ + @deprecated("This method implementation is incorrect and calling it can crash your program, please use `IArray.genericWrapArray(myIArray).toArray` instead.", "3.0.1") + def toArray: Array[T] = + arr.clone.asInstanceOf[Array[T]] extension [T](arr: IArray[T]) def ++[U >: T: ClassTag](suffix: IArray[U]): IArray[U] = genericArrayOps(arr) ++ suffix.toSeq diff --git a/tests/neg-custom-args/deprecation/i12597.scala b/tests/neg-custom-args/deprecation/i12597.scala new file mode 100644 index 000000000000..7927dded0cbc --- /dev/null +++ b/tests/neg-custom-args/deprecation/i12597.scala @@ -0,0 +1,5 @@ +@main def Test = + val a: IArray[Int] = IArray(2) + val b: IArray[Any] = a + val c = b.toArray // error: deprecated + c(0) = "" diff --git a/tests/run/i12597.scala b/tests/run/i12597.scala new file mode 100644 index 000000000000..73cc4185d74e --- /dev/null +++ b/tests/run/i12597.scala @@ -0,0 +1,5 @@ +@main def Test = + val a: IArray[Int] = IArray(2) + val b: IArray[Any] = a + val c = IArray.genericWrapArray(b).toArray + c(0) = ""