diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2015-03-17 15:46:07 -0700 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2015-03-17 15:46:07 -0700 |
commit | 2dc3b19fb3fe18dada28c3506a14dd9602065e06 (patch) | |
tree | 5e36d534f7bda9a40337a5f79ae73693019f83e1 | |
parent | fa33395a25c87115c910e8d4a4124aee6134062b (diff) | |
download | scala-2dc3b19fb3fe18dada28c3506a14dd9602065e06.tar.gz scala-2dc3b19fb3fe18dada28c3506a14dd9602065e06.tar.bz2 scala-2dc3b19fb3fe18dada28c3506a14dd9602065e06.zip |
SI-9231 Don't attempt implicit search for erroneous parameter
If the instantiated type of an implicit parameter is erroneous,
we should not attempt the implicit search. This avoids the following
useless error message in the enclosed test:
error: ambiguous implicit values: ... match expected type M[<error>]
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 2 | ||||
-rw-r--r-- | test/files/neg/t9231.check | 4 | ||||
-rw-r--r-- | test/files/neg/t9231.scala | 9 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 3a85d16f55..377404b564 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -151,7 +151,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper for(ar <- argResultsBuff) paramTp = paramTp.subst(ar.subst.from, ar.subst.to) - val res = if (paramFailed || (paramTp.isError && {paramFailed = true; true})) SearchFailure else inferImplicit(fun, paramTp, context.reportErrors, isView = false, context) + val res = if (paramFailed || (paramTp.isErroneous && {paramFailed = true; true})) SearchFailure else inferImplicit(fun, paramTp, context.reportErrors, isView = false, context) argResultsBuff += res if (res.isSuccess) { diff --git a/test/files/neg/t9231.check b/test/files/neg/t9231.check new file mode 100644 index 0000000000..43c14f53ca --- /dev/null +++ b/test/files/neg/t9231.check @@ -0,0 +1,4 @@ +t9231.scala:8: error: not found: type DoesNotExist + foo[DoesNotExist] + ^ +one error found diff --git a/test/files/neg/t9231.scala b/test/files/neg/t9231.scala new file mode 100644 index 0000000000..05b1d24e9a --- /dev/null +++ b/test/files/neg/t9231.scala @@ -0,0 +1,9 @@ +class M[A] +class C { + implicit def M1: M[Int] = null + implicit def M2: M[String] = null + + def foo[A](implicit M: M[A]) = null + + foo[DoesNotExist] +} |