summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/pending/pos/t8219.scala36
1 files changed, 36 insertions, 0 deletions
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("")
+ }
+}