diff options
-rw-r--r-- | src/dotty/tools/dotc/transform/LambdaLift.scala | 10 | ||||
-rw-r--r-- | tests/pending/pos/tailcall/t1672.scala (renamed from tests/pos/tailcall/t1672.scala) | 0 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/transform/LambdaLift.scala b/src/dotty/tools/dotc/transform/LambdaLift.scala index cd74da603..f34b5479a 100644 --- a/src/dotty/tools/dotc/transform/LambdaLift.scala +++ b/src/dotty/tools/dotc/transform/LambdaLift.scala @@ -31,7 +31,7 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this import ast.tpd._ /** the following two members override abstract members in Transform */ - val phaseName: String = "lambdalift" + val phaseName: String = "lambdaLift" override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Constructors]) // Constructors has to happen before LambdaLift because the lambda lift logic @@ -164,9 +164,13 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this val sym = tree.symbol tree match { case tree: Ident => - if (sym.maybeOwner.isTerm) - if (sym is (Method, butNot = Label)) markCalled(sym, enclosure) + if (sym.maybeOwner.isTerm) { + if (sym is Label) + assert(enclosure == sym.enclosure, + i"attempt to refer to label $sym from nested $enclosure") + else if (sym is Method) markCalled(sym, enclosure) else if (sym.isTerm) markFree(sym, enclosure) + } case tree: Select => if (sym.isConstructor && sym.owner.owner.isTerm) markCalled(sym, enclosure) diff --git a/tests/pos/tailcall/t1672.scala b/tests/pending/pos/tailcall/t1672.scala index 9be5c6066..9be5c6066 100644 --- a/tests/pos/tailcall/t1672.scala +++ b/tests/pending/pos/tailcall/t1672.scala |