diff options
-rw-r--r-- | src/dotty/tools/dotc/typer/Inferencing.scala | 2 | ||||
-rw-r--r-- | tests/pos/tparam_inf.scala | 30 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/typer/Inferencing.scala b/src/dotty/tools/dotc/typer/Inferencing.scala index f414d3bce..ac4ad1b35 100644 --- a/src/dotty/tools/dotc/typer/Inferencing.scala +++ b/src/dotty/tools/dotc/typer/Inferencing.scala @@ -141,7 +141,7 @@ object Inferencing { if (toTest.isEmpty) acc else tree match { case Apply(fn, _) => - fn.tpe match { + fn.tpe.widen match { case mtp: MethodType => val (occ, nocc) = toTest.partition(tvar => mtp.paramTypes.exists(tvar.occursIn)) occurring(fn, nocc, occ ::: acc) diff --git a/tests/pos/tparam_inf.scala b/tests/pos/tparam_inf.scala index 7b0ee0b36..16d99b75d 100644 --- a/tests/pos/tparam_inf.scala +++ b/tests/pos/tparam_inf.scala @@ -1,12 +1,38 @@ +class HasFoo[T] { + val x: Foo[T] = ??? +} +class Foo[T] { + def get(x: T): T = x + def get2(x: T): Nothing = ??? + + def foo1(x: T)(implicit ev: T): Nothing = ??? + def foo2(x: T)(implicit ev: T): T = ??? + def foo3[Dummy](x: T)(implicit ev: T): Nothing = ??? + def foo4[Dummy](x: T)(implicit ev: T): T = ??? +} + object Test { + def foo1[T](x: T)(implicit ev: T): Nothing = ??? def foo2[T](x: T)(implicit ev: T): T = ??? - def test: Unit = { + def test1: Unit = { implicit val ii: Int = 42 foo1(10) foo2(10) } -} + def hf[T]: HasFoo[T] = ??? + def test2: Unit = { + implicit val ii: Int = 42 + + hf.x.get(10) + hf.x.get2(10) + + hf.x.foo1(10) + hf.x.foo2(10) + hf.x.foo3(10) + hf.x.foo4(10) + } +} |