From 75775a29cfc5dddfb53e1d0bd96012c9fe81dc24 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 9 Jan 2020 10:59:19 +0100 Subject: [PATCH] Fix #2887: Add regression test --- tests/neg/i2887a.scala | 13 +++++++++++++ tests/neg/i2887b.scala | 13 +++++++++++++ tests/neg/i2887c.scala | 13 +++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 tests/neg/i2887a.scala create mode 100644 tests/neg/i2887b.scala create mode 100644 tests/neg/i2887c.scala diff --git a/tests/neg/i2887a.scala b/tests/neg/i2887a.scala new file mode 100644 index 000000000000..ac8e246917e3 --- /dev/null +++ b/tests/neg/i2887a.scala @@ -0,0 +1,13 @@ +trait A { type L[G[F[_],_],H[F[_],_]] } +trait B { type L[F[_],_] } +trait C { type M <: A } +trait D { type M >: B } + +object Test { + def test(x: C with D): Unit = { + def foo(a: A, b: B)(z: a.L[b.L,b.L]) = z + def bar(y: x.M, b: B) = foo(y, b) + def baz(b: B) = bar(b, b) + baz(new B { type L[F[_],X] = F[X] })(1) // error + } +} diff --git a/tests/neg/i2887b.scala b/tests/neg/i2887b.scala new file mode 100644 index 000000000000..3984949bf580 --- /dev/null +++ b/tests/neg/i2887b.scala @@ -0,0 +1,13 @@ +trait A { type S[X[_] <: [_] => Any, Y[_]] <: [_] => Any; type I[_] } // error // error +trait B { type S[X[_],Y[_]]; type I[_] <: [_] => Any } // error +trait C { type M <: B } +trait D { type M >: A } + +object Test { + def test(x: C with D): Unit = { + def foo(a: A, b: B)(z: a.S[b.I,a.I][b.S[a.I,a.I]]) = z // error + def bar(a: A, y: x.M) = foo(a,y) + def baz(a: A) = bar(a, a) + baz(new A { type S[X[_] <: [_] => Any, Y[_]] = [Z] => X[Z][Y[Z]]; type I[X] = X })(1) // error // error + } +} diff --git a/tests/neg/i2887c.scala b/tests/neg/i2887c.scala new file mode 100644 index 000000000000..910b59eec0e9 --- /dev/null +++ b/tests/neg/i2887c.scala @@ -0,0 +1,13 @@ +trait A { type S[X[_,_], Y[_],_]; type I[_] } +trait B { type S[X[_],Y[_]]; type I[_,_] } +trait C { type M <: B } +trait D { type M >: A } + +object Test { + def test(x: C with D): Unit = { + def foo(a: A, b: B)(z: a.S[b.I,a.I,b.S[a.I,a.I]]) = z + def bar(a: A, y: x.M) = foo(a,y) + def baz(a: A) = bar(a, a) + baz(new A { type S[X[_,_], Y[_], Z] = X[Z,Y[Z]]; type I[X] = X })(1) // error + } +}