diff options
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/t2316.check | 7 | ||||
-rw-r--r-- | test/files/neg/t2316.scala | 43 |
2 files changed, 50 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 diff --git a/test/files/neg/t2316.scala b/test/files/neg/t2316.scala new file mode 100644 index 0000000000..ccda9d5aac --- /dev/null +++ b/test/files/neg/t2316.scala @@ -0,0 +1,43 @@ +object test { + case class T1(val source: String) + + + object T1 { + implicit def T1FromT2(implicit t2: T2): T1 = T1("implicit def T1FromT2") + implicit def T1FromT3(implicit t3: T3): T1 = T1("implicit def T1FromT3") + } + + trait T2 { + } + + object T2 { + implicit val t2: T2 = new T2 {} + } + + trait T3 + + def requireT1(implicit t1: T1) = t1 + + { + val t1 = requireT1 + assert(t1.source == "implicit def T1FromT2") + } + + { + implicit def t3: T3 = new T3 {} + val t1 = requireT1 + assert(t1.source == "implicit def T1FromT2") + + // Expected a compile error here, but because T1.T1FromT2(T2.t2) was cached as a non-local implicit + // expression for type T1, this is not checked! + // + // (fragment of implicit-cache-error2.scala):26: error: ambiguous implicit values: + // both method T1FromT3 in object T1 of type (implicit t3: this.T3)this.T1 + // and method T1FromT2 in object T1 of type (implicit t2: this.T2)this.T1 + // match expected type this.T1 + // val t1 = requireT1 + // ^ + // one error found + + } +}
\ No newline at end of file |