diff options
-rw-r--r-- | src/dotty/tools/dotc/config/Config.scala | 3 | ||||
-rw-r--r-- | src/dotty/tools/dotc/config/ScalaSettings.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 2 | ||||
-rw-r--r-- | test/dotc/tests.scala | 10 |
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) |