aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-08-14 10:27:43 +0200
committerMartin Odersky <odersky@gmail.com>2014-08-16 11:56:58 +0200
commit90aef309eaf72ab0c09494eb030c57789955bb21 (patch)
treedf3b29d9f0e3d527ff49761f905737424896040d
parent7d414eb69b28fa0f6855168aa7afe43a75b3f23e (diff)
downloaddotty-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.scala17
-rw-r--r--test/dotc/tests.scala2
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")