aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeComparer.scala2
-rw-r--r--compiler/test/dotc/tests.scala1
-rw-r--r--tests/neg/customArgs/i2002.scala4
-rw-r--r--tests/neg/i2000.scala23
4 files changed, 29 insertions, 1 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeComparer.scala b/compiler/src/dotty/tools/dotc/core/TypeComparer.scala
index 6063cbf38..fca111702 100644
--- a/compiler/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/compiler/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -489,7 +489,7 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling {
case tp1 @ MethodType(_, formals1) =>
(tp1.signature consistentParams tp2.signature) &&
matchingParams(formals1, formals2, tp1.isJava, tp2.isJava) &&
- (!tp1.isImplicit || tp2.isImplicit) && // non-implicit functions shadow implicit ones
+ (tp1.isImplicit == tp2.isImplicit) &&
isSubType(tp1.resultType, tp2.resultType.subst(tp2, tp1))
case _ =>
false
diff --git a/compiler/test/dotc/tests.scala b/compiler/test/dotc/tests.scala
index 7af903364..6b11d8ba0 100644
--- a/compiler/test/dotc/tests.scala
+++ b/compiler/test/dotc/tests.scala
@@ -196,6 +196,7 @@ class tests extends CompilerTest {
@Test def neg_nopredef = compileFile(negCustomArgs, "nopredef", List("-Yno-predef"))
@Test def neg_noimports = compileFile(negCustomArgs, "noimports", List("-Yno-imports"))
@Test def neg_noimpots2 = compileFile(negCustomArgs, "noimports2", List("-Yno-imports"))
+ @Test def neg_i2002 = compileFile(negCustomArgs, "i2002", Nil)
@Test def run_all = runFiles(runDir)
diff --git a/tests/neg/customArgs/i2002.scala b/tests/neg/customArgs/i2002.scala
new file mode 100644
index 000000000..5561b77b8
--- /dev/null
+++ b/tests/neg/customArgs/i2002.scala
@@ -0,0 +1,4 @@
+class Test {
+ def foo(i: Int): Int = i
+ def foo(implicit i: Int): Int = i // error
+}
diff --git a/tests/neg/i2000.scala b/tests/neg/i2000.scala
new file mode 100644
index 000000000..aa1250f08
--- /dev/null
+++ b/tests/neg/i2000.scala
@@ -0,0 +1,23 @@
+object test1 {
+ class C[A] { def foo(a: A) = "c" }
+ class D extends C[String] { override def foo(implicit s: String) = "d" } // error
+}
+
+object test2 {
+ class C[A] { final def foo(a: A) = "c" }
+ class D extends C[String] { def foo(implicit s: String) = "d" } // error
+ object Test {
+ def main(args: Array[String]) =
+ new D
+ }
+}
+
+object test3 {
+ class A {
+ def foo(implicit i: Int): Int = i + i
+ }
+
+ class B extends A {
+ override def foo(i: Int): Int = i // error
+ }
+}