diff options
author | Martin Odersky <odersky@gmail.com> | 2014-08-14 10:27:43 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-08-16 11:56:58 +0200 |
commit | 90aef309eaf72ab0c09494eb030c57789955bb21 (patch) | |
tree | df3b29d9f0e3d527ff49761f905737424896040d | |
parent | 7d414eb69b28fa0f6855168aa7afe43a75b3f23e (diff) | |
download | dotty-90aef309eaf72ab0c09494eb030c57789955bb21.tar.gz dotty-90aef309eaf72ab0c09494eb030c57789955bb21.tar.bz2 dotty-90aef309eaf72ab0c09494eb030c57789955bb21.zip |
Moved -Ycheck after Splitter
This required a change in Ycheck where we now only test that the new tree has a subtype of the old
one. Previously the requirement was "same type" but this caused "sigs.scala" to fail because
a new tree had a constant Int type where the old tree had just Int as the type. It's hard to guard
against these narrowings and they look harmless.
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 17 | ||||
-rw-r--r-- | test/dotc/tests.scala | 2 |
2 files changed, 7 insertions, 12 deletions
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 87e84e169..e22edf4df 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -45,23 +45,18 @@ class TreeChecker { promote(tree) case _ => val tree1 = super.typed(tree, pt) - def sameType(tp1: Type, tp2: Type) = + def isSubType(tp1: Type, tp2: Type) = (tp1 eq tp2) || // accept NoType / NoType - (tp1 =:= tp2) - def divergenceMsg = { - def explanation(tp1: Type, tp2: Type) = - if (tp1 <:< tp2) "" - else "\n why different:\n" + core.TypeComparer.explained((tp1 <:< tp2)(_)) + (tp1 <:< tp2) + def divergenceMsg(tp1: Type, tp2: Type) = s"""Types differ |Original type : ${tree.typeOpt.show} |After checking: ${tree1.tpe.show} |Original tree : ${tree.show} |After checking: ${tree1.show} - """.stripMargin + - explanation(tree1.tpe, tree.typeOpt) + - explanation(tree.typeOpt, tree1.tpe) - } - assert(sameType(tree1.tpe, tree.typeOpt), divergenceMsg) + |Why different : + """.stripMargin + core.TypeComparer.explained((tp1 <:< tp2)(_)) + assert(isSubType(tree1.tpe, tree.typeOpt), divergenceMsg(tree1.tpe, tree.typeOpt)) tree1 } } catch { diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala index 12a2a8cb8..795e11c75 100644 --- a/test/dotc/tests.scala +++ b/test/dotc/tests.scala @@ -14,7 +14,7 @@ class tests extends CompilerTest { "-pagewidth", "160") implicit val defaultOptions = noCheckOptions ++ List( - "-Ycheck:refchecks,tailrec" + "-Ycheck:splitter" ) val twice = List("#runs", "2", "-YnoDoubleBindings") |