From 377b47980de724d1924e520346c26a836ee63a99 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 5 Apr 2018 13:18:02 +0200 Subject: [PATCH] Fix #4247: Handle Array self types --- compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala | 8 ++++++-- tests/neg/i4247.scala | 3 +++ tests/neg/i4247b.scala | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 tests/neg/i4247.scala create mode 100644 tests/neg/i4247b.scala 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 +}