summaryrefslogtreecommitdiff
path: root/test/files/neg/t2316.check
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2009-09-29 16:32:28 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2009-09-29 16:32:28 +0000
commit1575d9b94e889661c660c6b35b915afa5833b2b9 (patch)
tree03e5d6b79a7899d2c57079f33845633e8ceb8070 /test/files/neg/t2316.check
parent72789e9bb8c2474563c405ee8087b5e21be5993d (diff)
downloadscala-1575d9b94e889661c660c6b35b915afa5833b2b9.tar.gz
scala-1575d9b94e889661c660c6b35b915afa5833b2b9.tar.bz2
scala-1575d9b94e889661c660c6b35b915afa5833b2b9.zip
fixed #2316: No longer cache entire SearchResul...
fixed #2316: No longer cache entire SearchResult when looking for implicits in the parts of the expected type. (patch by retronym -- see ticket) A SearchResult may contain symbols local to the scope of the search that were used as implicit parameters, so they are not safely cacheable. The fix for #2101 does not suffice. That patch avoided bound symbols being duplicated, but the problem is much worse. The implicits for an expected type depend on more than just that type, so we cannot cache them using the expected type as a key. The neg/t2316 test illustrates this: T1 may provide two implicits, one requires an implicit T2, another an implicit T3. If an implicit T1 is first required when only a T2 is in scope, the SearchResult will describe the corresponding implicit. Now, if we enter an implicit value of type T3 into scope, the search should fail (it is ambiguous), but the cache does not take this new fact into account. The patch replaces the erroneous aggressive caching with a more conservative version that only caches ImplicitInfo's.
Diffstat (limited to 'test/files/neg/t2316.check')
-rw-r--r--test/files/neg/t2316.check7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/files/neg/t2316.check b/test/files/neg/t2316.check
new file mode 100644
index 0000000000..fea1745663
--- /dev/null
+++ b/test/files/neg/t2316.check
@@ -0,0 +1,7 @@
+t2316.scala:28: error: ambiguous implicit values:
+ both method T1FromT3 in object T1 of type (implicit t3: test.T3)test.T1
+ and method T1FromT2 in object T1 of type (implicit t2: test.T2)test.T1
+ match expected type test.T1
+ val t1 = requireT1
+ ^
+one error found