summaryrefslogtreecommitdiff
path: root/test/files/neg
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert.plociniczak@epfl.ch>2011-04-29 14:27:40 +0000
committerHubert Plociniczak <hubert.plociniczak@epfl.ch>2011-04-29 14:27:40 +0000
commit96ab92d67c5ea5af3f322cd22205139b1bc846b8 (patch)
tree8f45b390bab3533659364863b8a09d87f99ba952 /test/files/neg
parent6c1feb586bc3687ee08d2395233c849550530ba7 (diff)
downloadscala-96ab92d67c5ea5af3f322cd22205139b1bc846b8.tar.gz
scala-96ab92d67c5ea5af3f322cd22205139b1bc846b8.tar.bz2
scala-96ab92d67c5ea5af3f322cd22205139b1bc846b8.zip
Closes #4457. Review by odersky
Diffstat (limited to 'test/files/neg')
-rw-r--r--test/files/neg/t4457_1.check7
-rw-r--r--test/files/neg/t4457_1.scala33
-rw-r--r--test/files/neg/t4457_2.check13
-rw-r--r--test/files/neg/t4457_2.scala33
4 files changed, 86 insertions, 0 deletions
diff --git a/test/files/neg/t4457_1.check b/test/files/neg/t4457_1.check
new file mode 100644
index 0000000000..c6b83c6ce5
--- /dev/null
+++ b/test/files/neg/t4457_1.check
@@ -0,0 +1,7 @@
+t4457_1.scala:27: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[Float]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ val x = aFunc(4F)
+ ^
+one error found
diff --git a/test/files/neg/t4457_1.scala b/test/files/neg/t4457_1.scala
new file mode 100644
index 0000000000..11f12379f6
--- /dev/null
+++ b/test/files/neg/t4457_1.scala
@@ -0,0 +1,33 @@
+object ImplicitConvAmbiguity2 {
+
+ class N[T]
+ class NE[T] extends N[T]
+ class NN[T] extends N[T]
+ class NQ[T] extends N[T]
+ class NZ[T] extends N[T]
+ class AA[A]
+ class BB[A]
+
+ implicit def conv1(i: Float) = new NE[Float]
+ implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException]
+ implicit def conv4(op: AA[Float]) = new N[Float]
+ implicit def conv7(i: Float) = new NZ[Float]
+ implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar]
+
+ // These two will be in conflict in typeMe1
+ def aFunc[A](a: NE[A]) = new AA[A]
+ def aFunc[A](a: NZ[A]) = new AA[Float]
+
+ def aFunc[A](a: NN[A]) = new BB[A]
+ def aFunc[A](a: NQ[A]) = new BB[A]
+
+ def bFunc[T](e1: N[T]) = {}
+
+ def typeMe1 {
+ val x = aFunc(4F)
+ bFunc(x)
+ }
+ def typeMe2 {
+ bFunc(aFunc(4F))
+ }
+}
diff --git a/test/files/neg/t4457_2.check b/test/files/neg/t4457_2.check
new file mode 100644
index 0000000000..770a355395
--- /dev/null
+++ b/test/files/neg/t4457_2.check
@@ -0,0 +1,13 @@
+t4457_2.scala:27: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ val x = aFunc(4F)
+ ^
+t4457_2.scala:31: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ bFunc(aFunc(4F))
+ ^
+two errors found
diff --git a/test/files/neg/t4457_2.scala b/test/files/neg/t4457_2.scala
new file mode 100644
index 0000000000..f3a170f1f2
--- /dev/null
+++ b/test/files/neg/t4457_2.scala
@@ -0,0 +1,33 @@
+object ImplicitConvAmbiguity2 {
+
+ class N[T]
+ class NE[T] extends N[T]
+ class NN[T] extends N[T]
+ class NQ[T] extends N[T]
+ class NZ[T] extends N[T]
+ class AA[A]
+ class BB[A]
+
+ implicit def conv1(i: Float) = new NE[Float]
+ implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException]
+ implicit def conv4(op: AA[Float]) = new N[Float]
+ implicit def conv7(i: Float) = new NZ[Float]
+ implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar]
+
+ def aFunc[A](a: NE[A]) = new AA[A]
+ def aFunc[A](a: NZ[A]) = new AA[A]
+
+ def aFunc[A](a: NN[A]) = new BB[A]
+
+ def aFunc[A](a: NQ[A]) = new BB[A]
+
+ def bFunc[T](e1: N[T]) = {}
+
+ def typeMe2 {
+ val x = aFunc(4F)
+ bFunc(x)
+ }
+ def typeMe1 {
+ bFunc(aFunc(4F))
+ }
+}