aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/pos/overloaded.scala36
-rw-r--r--tests/run/t1381.check7
-rw-r--r--tests/run/t1381.scala59
3 files changed, 66 insertions, 36 deletions
diff --git a/tests/pos/overloaded.scala b/tests/pos/overloaded.scala
index 0ccc553a8..6a8e72714 100644
--- a/tests/pos/overloaded.scala
+++ b/tests/pos/overloaded.scala
@@ -47,40 +47,4 @@ object overloaded {
val t5: Int = r5
val r6 = combine((x: String, y) => x ++ y.toString)
val t6: String = r6
-
- // test result disambiguation
- trait A
- trait B
- class C extends A with B
- def fr(x: A): A = x
- def fr(x: B): B = x
- val a: A = fr(new C)
- val b: B = fr(new C)
-}
-
-// from #1381
-
-object Foo {
- class Bar[T]
- implicit def const[T](x: T): Bar[T] = ???
-
- def bar[T](e: T): Any = ???
- def bar[T](e: Bar[T]): Any = ???
-
- val b: Bar[Int] = ???
- bar(b)
-}
-
-object Test2 {
- trait A; trait B
- class C1 {
- def f(x: A): Unit = println("A")
- }
- class C2 extends C1 {
- def f(x: B): Unit = println("B")
- }
- object Test extends C2 with App {
- implicit def a2b(x: A): B = new B {}
- f(new A {})
- }
}
diff --git a/tests/run/t1381.check b/tests/run/t1381.check
new file mode 100644
index 000000000..84aec1df2
--- /dev/null
+++ b/tests/run/t1381.check
@@ -0,0 +1,7 @@
+4
+3
+2
+A
+B
+frA
+frB
diff --git a/tests/run/t1381.scala b/tests/run/t1381.scala
new file mode 100644
index 000000000..c7f49c6c3
--- /dev/null
+++ b/tests/run/t1381.scala
@@ -0,0 +1,59 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ Test1.test()
+ Test2.test()
+ Test3.test()
+ }
+}
+
+object Test1 {
+ class Bar[T](n: Int) {
+ println(n)
+ }
+ implicit def const[T](x: T): Bar[T] = new Bar[T](1)
+
+ def bar[T](e: T): Any = new Bar[T](2)
+ def bar[T](e: Bar[T]): Any = new Bar[T](3)
+
+ val b: Bar[Int] = new Bar[Int](4)
+
+ def test(): Unit = {
+ bar(b)
+ bar(5)
+ }
+}
+
+object Test2 {
+ trait A; trait B
+ class C1 {
+ def f(x: A): Unit = println("A")
+ }
+ class C2 extends C1 {
+ def f(x: B): Unit = println("B")
+ }
+ object Test extends C2 with App {
+ implicit def a2b(x: A): B = new B {}
+ def test(): Unit = {
+ f(new A {})
+ f(new B {})
+ }
+ }
+ def test(): Unit = Test.test()
+}
+
+object Test3 {
+ trait A; trait B
+ class C extends A with B
+ def fr(x: A): A = {
+ println("frA")
+ x
+ }
+ def fr(x: B): B = {
+ println("frB")
+ x
+ }
+ def test(): Unit = {
+ val a: A = fr(new C)
+ val b: B = fr(new C)
+ }
+}