Skip to content

Commit 915816a

Browse files
authored
Merge pull request #155 from scala/backport-lts-3.3-22238
Backport "Fix scala#22226: Use `classOf[BoxedUnit]` for Unit array in `ArrayConstructors`." to 3.3 LTS
2 parents b6a0d1c + c612ddb commit 915816a

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

Diff for: compiler/src/dotty/tools/dotc/transform/ArrayConstructors.scala

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ class ArrayConstructors extends MiniPhase {
2727

2828
override def transformApply(tree: tpd.Apply)(using Context): tpd.Tree = {
2929
def expand(elemType: Type, dims: List[Tree]) =
30-
tpd.newArray(elemType, tree.tpe, tree.span, JavaSeqLiteral(dims, TypeTree(defn.IntClass.typeRef)))
30+
val elemTypeNonVoid =
31+
if elemType.isValueSubType(defn.UnitType) then defn.BoxedUnitClass.typeRef
32+
else elemType
33+
tpd.newArray(elemTypeNonVoid, tree.tpe, tree.span, JavaSeqLiteral(dims, TypeTree(defn.IntClass.typeRef)))
3134

3235
if (tree.fun.symbol eq defn.ArrayConstructor) {
3336
val TypeApply(tycon, targ :: Nil) = tree.fun: @unchecked

Diff for: tests/sjs-junit/test/org/scalajs/testsuite/compiler/RegressionTestScala3.scala

+11
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,17 @@ class RegressionTestScala3 {
145145
assertEquals(5, Issue14289.Container.b())
146146
assertEquals(true, Issue14289.Container.c())
147147
}
148+
149+
@Test def createArrayOfUnitIssue22226(): Unit = {
150+
val a = Array.ofDim[Unit](0)
151+
assertSame(classOf[Array[Unit]], a.getClass())
152+
153+
val b = new Array[Unit](0)
154+
assertSame(classOf[Array[Unit]], b.getClass())
155+
156+
val c = Array.ofDim[Unit](0, 0)
157+
assertSame(classOf[Array[Array[Unit]]], c.getClass())
158+
}
148159
}
149160

150161
object RegressionTestScala3 {

0 commit comments

Comments
 (0)