aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/config/Config.scala3
-rw-r--r--src/dotty/tools/dotc/config/ScalaSettings.scala1
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala2
-rw-r--r--test/dotc/tests.scala10
4 files changed, 9 insertions, 7 deletions
diff --git a/src/dotty/tools/dotc/config/Config.scala b/src/dotty/tools/dotc/config/Config.scala
index 353ec1dce..b17a5630f 100644
--- a/src/dotty/tools/dotc/config/Config.scala
+++ b/src/dotty/tools/dotc/config/Config.scala
@@ -21,9 +21,6 @@ object Config {
*/
final val checkNoDoubleBindings = true
- /** Throw an exception if a deep subtype recursion is detected */
- final val flagDeepSubTypeRecursions = true
-
/** Show subtype traces for all deep subtype recursions */
final val traceDeepSubTypeRecursions = false
diff --git a/src/dotty/tools/dotc/config/ScalaSettings.scala b/src/dotty/tools/dotc/config/ScalaSettings.scala
index 177813555..f23fb6201 100644
--- a/src/dotty/tools/dotc/config/ScalaSettings.scala
+++ b/src/dotty/tools/dotc/config/ScalaSettings.scala
@@ -146,6 +146,7 @@ class ScalaSettings extends Settings.SettingGroup {
val YshowSuppressedErrors = BooleanSetting("-Yshow-suppressed-errors", "Also show follow-on errors and warnings that are normally supressed.")
val Yheartbeat = BooleanSetting("-Yheartbeat", "show heartbeat stack trace of compiler operations.")
val Yprintpos = BooleanSetting("-Yprintpos", "show tree positions")
+ val YnoDeepSubtypes = BooleanSetting("-YnoDeepSubtypes", "throw an exception on deep subtyping call stacks")
def stop = YstopAfter
/** Area-specific debug output.
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 805941c5d..5322162d5 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -422,7 +422,7 @@ class TypeComparer(initctx: Context) extends DotClass {
pendingSubTypes = new mutable.HashSet[(Type, Type)]
ctx.log(s"!!! deep subtype recursion involving ${tp1.show} <:< ${tp2.show}, constraint = ${state.constraint.show}")
ctx.log(s"!!! constraint = ${constraint.show}")
- assert(!Config.flagDeepSubTypeRecursions)
+ assert(!ctx.settings.YnoDeepSubtypes.value)
if (Config.traceDeepSubTypeRecursions && !this.isInstanceOf[ExplainingTypeComparer])
ctx.log(TypeComparer.explained(implicit ctx => ctx.typeComparer.isSubType(tp1, tp2)))
}
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index c828712ae..aa9d5b4c5 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -13,7 +13,10 @@ class tests extends CompilerTest {
// "-Yshow-suppressed-errors",
"-pagewidth", "160")
- implicit val defaultOptions = noCheckOptions ++ List("-Ycheck:patternMatcher,literalize,capturedVars", "-Ystop-before:erasure"
+ implicit val defaultOptions = noCheckOptions ++ List(
+ "-YnoDeepSubtypes",
+ "-Ycheck:patternMatcher,literalize,capturedVars",
+ "-Ystop-before:erasure"
/*,"-uniqid", "-explaintypes", "-verbose", "-Ylog:splitter", "-Xprompt", "-YnoDoubleBindings"*/
)
@@ -100,8 +103,9 @@ class tests extends CompilerTest {
@Test def dotc_ast = compileDir(dotcDir + "tools/dotc/ast", twice)
@Test def dotc_config = compileDir(dotcDir + "tools/dotc/config", twice)
@Test def dotc_core = compileDir(dotcDir + "tools/dotc/core", twice)
- // @Test def dotc_core_pickling = compileDir(dotcDir + "tools/dotc/core/pickling", twice)
- // @odesky, fails on assertion in TypeComparer:425
+ @Test def dotc_core_pickling = compileDir(dotcDir + "tools/dotc/core/pickling", twice)(
+ defaultOptions diff List("-YnoDeepSubtypes"))
+ // @odesky, fails on assertion in TypeComparer:425 (fixed)
@Test def dotc_core_transform = compileDir(dotcDir + "tools/dotc/core/transform", twice)