diff --git a/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala b/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala index 3fafcef1bace..07883266ac73 100644 --- a/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala +++ b/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala @@ -315,8 +315,12 @@ trait TypeAssigner { def assignType(tree: untpd.Select, qual: Tree)(implicit ctx: Context): Select = { def qualType = qual.tpe.widen def arrayElemType = { - val JavaArrayType(elemtp) = qualType - elemtp + qualType match { + case JavaArrayType(elemtp) => elemtp + case _ => + ctx.error("Expected Array but was " + qualType.show, tree.sourcePos) + defn.NothingType + } } val p = nme.primitive val tp = tree.name match { diff --git a/tests/neg/i4247.scala b/tests/neg/i4247.scala new file mode 100644 index 000000000000..6a4db932eb84 --- /dev/null +++ b/tests/neg/i4247.scala @@ -0,0 +1,3 @@ +class Foo[U] { self : Array[U] & Nothing => + val s = self(0) // error +} diff --git a/tests/neg/i4247b.scala b/tests/neg/i4247b.scala new file mode 100644 index 000000000000..1272fd372e28 --- /dev/null +++ b/tests/neg/i4247b.scala @@ -0,0 +1,3 @@ +class Foo[U] { self : Array[U] => + self(0) // error +}