From 4b3dbd91d9d81f61809ef47a2a324eabfb122b71 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Mon, 3 Feb 2014 11:01:27 +0100 Subject: SI-8219 Pending test case for unpositioned implicit error Extracted with tweezers from ScalaTest and Scalacheck implicits. % scalac-hash v2.11.0-M7 test/pending/pos/t8219.scala error: type mismatch; found : Any required: AnyRef Note: Any is not implicitly converted to AnyRef. You can safely pattern match `x: AnyRef` or cast `x.asInstanceOf[AnyRef]` to do so. error: type mismatch; found : Any required: AnyRef Note: Any is not implicitly converted to AnyRef. You can safely pattern match `x: AnyRef` or cast `x.asInstanceOf[AnyRef]` to do so. two errors found --- test/pending/pos/t8219.scala | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 test/pending/pos/t8219.scala (limited to 'test/pending/pos/t8219.scala') diff --git a/test/pending/pos/t8219.scala b/test/pending/pos/t8219.scala new file mode 100644 index 0000000000..96bf03d316 --- /dev/null +++ b/test/pending/pos/t8219.scala @@ -0,0 +1,36 @@ +trait Equalizer[T] +trait Gen[A] + +class Broken { + implicit def const[T](x: T): Gen[T] = ??? + implicit def convertToEqualizer[T](left: T): Equalizer[T] = ??? + + def in(a: Any) = () + in { + import scala.None // any import will do.. + "" == "" + } + + // We fall into the errant code path above because `Any#==` and `AnyRef#==` + // are (currently) overloaded. + // + // Real classes couldn't get away with that overloading; it would result in + // a compiler error because the variants would collapse into an overriding + // relationship after erasure. + // + // + // But, a structural type can! This triggers the same error, and served as + // a backstop for this test if we change the signatures of `AnyRef#==` to + // override `Any#==`. + type T = { + def a(a: AnyRef): Boolean + def a(a: Any): Boolean + } + + def t: T = ??? + + in { + import scala.None // any import will do.. + t.a("") + } +} -- cgit v1.2.3