aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/typer/Inferencing.scala2
-rw-r--r--tests/pos/tparam_inf.scala30
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)
+ }
+}