summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-22 14:20:18 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-26 21:46:40 +0100
commit9aa6ded8e01179e7d55144de273b39f3a0b2d3ec (patch)
tree4746ee626e95c54b4a1e7e0339afae68c60dc0ff /src/compiler/scala/tools/nsc/typechecker/Implicits.scala
parent3719f790f301852b85dcd95b401c921e286d4e1e (diff)
downloadscala-9aa6ded8e01179e7d55144de273b39f3a0b2d3ec.tar.gz
scala-9aa6ded8e01179e7d55144de273b39f3a0b2d3ec.tar.bz2
scala-9aa6ded8e01179e7d55144de273b39f3a0b2d3ec.zip
SI-6667 Abort after any ambiguous in-scope implicit
Rather than continuing on to a search of implicits of the expected type. Previously, the companion implicits were searched if the the caller was running the implicit search in silent mode, for example if searching for an implicit parameter in an application which has an expected type. After this commit, the behaviour is consistent, regardless on silent/non-silent typing.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Implicits.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Implicits.scala3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
index 8f32f0e653..a74470a9cd 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
@@ -1399,11 +1399,12 @@ trait Implicits {
val failstart = if (Statistics.canEnable) Statistics.startTimer(oftypeFailNanos) else null
val succstart = if (Statistics.canEnable) Statistics.startTimer(oftypeSucceedNanos) else null
+ val wasAmbigious = result.isAmbiguousFailure // SI-6667, never search companions after an ambiguous error in in-scope implicits
result = materializeImplicit(pt)
// `materializeImplicit` does some preprocessing for `pt`
// is it only meant for manifests/tags or we need to do the same for `implicitsOfExpectedType`?
- if (result.isFailure) result = searchImplicit(implicitsOfExpectedType, false)
+ if (result.isFailure && !wasAmbigious) result = searchImplicit(implicitsOfExpectedType, false)
if (result.isFailure) {
context.updateBuffer(previousErrs)