From 8a0c3c445cf4d46a87e36c8166707575d82863bf Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Thu, 30 Mar 2017 21:54:23 +0200 Subject: Test that #2156 is fixed --- tests/run/i2156.scala | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tests/run/i2156.scala (limited to 'tests') diff --git a/tests/run/i2156.scala b/tests/run/i2156.scala new file mode 100644 index 000000000..12ce8fa88 --- /dev/null +++ b/tests/run/i2156.scala @@ -0,0 +1,37 @@ +class Outer { + + case class Inner() + + val inner: Inner = new Inner + + def checkInstance(o: Outer) = + o.inner.isInstanceOf[this.Inner] + + def checkPattern1(i: Any) = + i match { + case _: Inner => true + case _ => false + } + + def checkPattern2(i: Any) = + i match { + case Inner() => true + case _ => false + } + + def checkEquals(o: Outer) = + o.inner == inner +} + +object Test { + + def main(args: Array[String]) = { + val o1 = new Outer + val o2 = new Outer + assert(o1.checkInstance(o2)) // ok + assert(!o1.checkPattern1(o2.inner)) // ok under scalac, fails for dotc-compiled code + assert(!o1.checkPattern2(o2.inner)) // ok under scalac, fails for dotc-compiled code + assert(!o1.checkEquals(o2)) // ok under scalac, fails for dotc-compiled code + } +} + -- cgit v1.2.3 From f9db9097d0cf314d675669d80f8d5eb8d20f0710 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Thu, 30 Mar 2017 17:33:06 +0200 Subject: Fix #2151: don't die for wrong number of typeargs applied --- compiler/src/dotty/tools/dotc/core/Decorators.scala | 2 +- tests/neg/i2151.scala | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 tests/neg/i2151.scala (limited to 'tests') diff --git a/compiler/src/dotty/tools/dotc/core/Decorators.scala b/compiler/src/dotty/tools/dotc/core/Decorators.scala index f8267072e..0e8ae196a 100644 --- a/compiler/src/dotty/tools/dotc/core/Decorators.scala +++ b/compiler/src/dotty/tools/dotc/core/Decorators.scala @@ -103,7 +103,7 @@ object Decorators { * as long as `xs`. */ def zipWithConserve[U](ys: List[U])(f: (T, U) => T): List[T] = - if (xs.isEmpty) xs + if (xs.isEmpty || ys.isEmpty) Nil else { val x1 = f(xs.head, ys.head) val xs1 = xs.tail.zipWithConserve(ys.tail)(f) diff --git a/tests/neg/i2151.scala b/tests/neg/i2151.scala new file mode 100644 index 000000000..1ae034c02 --- /dev/null +++ b/tests/neg/i2151.scala @@ -0,0 +1,6 @@ +trait Test { + type Nil = [K] => K + type StrangeCons[H, Tail <: [H, A] => H] = Tail[H, H] + + def list: StrangeCons[Int, Nil] // error +} -- cgit v1.2.3