File tree 1 file changed +7
-3
lines changed
compiler/src/dotty/tools/backend/jvm
1 file changed +7
-3
lines changed Original file line number Diff line number Diff line change @@ -363,9 +363,13 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
363
363
}
364
364
else {
365
365
mnode.visitVarInsn(asm.Opcodes .ALOAD , 0 )
366
- generatedType =
367
- if (tree.symbol == defn.ArrayClass ) ObjectReference
368
- else classBTypeFromSymbol(claszSymbol)
366
+ // When compiling Array.scala, the constructor invokes `Array.this.super.<init>`. The expectedType
367
+ // is `[Object` (computed by typeToBType, the type of This(Array) is `Array[T]`). If we would set
368
+ // the generatedType to `Array` below, the call to adapt at the end would fail. The situation is
369
+ // similar for primitives (`I` vs `Int`).
370
+ if (tree.symbol != defn.ArrayClass && ! tree.symbol.isPrimitiveValueClass) {
371
+ generatedType = classBTypeFromSymbol(claszSymbol)
372
+ }
369
373
}
370
374
371
375
case DesugaredSelect (Ident (nme.EMPTY_PACKAGE ), module) =>
You can’t perform that action at this time.
0 commit comments