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