aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-02-21 10:28:56 +0100
committerMartin Odersky <odersky@gmail.com>2017-02-21 10:29:09 +0100
commit5dae5f2953438e8a1443075b44b310965c2cf863 (patch)
tree133a7fe8afed600767ad6b1cba4151ff87ea0e23 /compiler
parentf467be62da8978e506f58b702b84e74ef7ce09de (diff)
downloaddotty-5dae5f2953438e8a1443075b44b310965c2cf863.tar.gz
dotty-5dae5f2953438e8a1443075b44b310965c2cf863.tar.bz2
dotty-5dae5f2953438e8a1443075b44b310965c2cf863.zip
Fix #2000: Make implicit and non-implicit functions incomparable with <:<
Implicit and non-implicit functions are incomparable with <:<, but are treated as equivalent with `matches`. This means implicit and non-implicit functions of the same types override each other, but RefChecks will give an error because their types are not subtypes. Also contains a test for #2002.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeComparer.scala2
-rw-r--r--compiler/test/dotc/tests.scala1
2 files changed, 2 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)