Skip to content
Merged
Prev Previous commit
Next Next commit
Survive -Ycheck if widening of array element types is needed
  • Loading branch information
odersky committed Sep 26, 2025
commit 5907afb151bf146926890ec0e1320fd61f34f835
11 changes: 6 additions & 5 deletions compiler/src/dotty/tools/dotc/transform/PostTyper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ class PostTyper extends MacroTransform with InfoTransformer { thisPhase =>
*
* This then translates to
*
* scala.runtime.ArraySeqBuilcder.ofInt(2 + xs.length + ys.length)
* scala.runtime.VarArgsBuilder.ofInt(2 + xs.length + ys.length)
* .add(1)
* .addSeq(xs)
* .add(2)
Expand Down Expand Up @@ -450,10 +450,11 @@ class PostTyper extends MacroTransform with InfoTransformer { thisPhase =>
elems.foldLeft(builder.appliedTo(totalLength)): (bldr, elem) =>
elem match
case spread(arg) =>
val selector =
if arg.tpe.derivesFrom(defn.SeqClass) then "addSeq"
else "addArray"
bldr.select(selector.toTermName).appliedTo(arg)
if arg.tpe.derivesFrom(defn.SeqClass) then
bldr.select("addSeq".toTermName).appliedTo(arg)
else
bldr.select("addArray".toTermName).appliedTo(
arg.ensureConforms(defn.ArrayOf(elemType)))
case _ => bldr.select("add".toTermName).appliedTo(elem)
.select("result".toTermName)
.appliedToNone
Expand Down
1 change: 1 addition & 0 deletions tests/run/spreads-subtyping.check
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ooffoobar
7 changes: 7 additions & 0 deletions tests/run/spreads-subtyping.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import language.experimental.multiSpreads

def foo(x: CharSequence*): String = x.mkString
val strings: Array[String] = Array("foo", "bar")

@main def Test =
println(foo(("oof": CharSequence), strings*))