aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/transform/LambdaLift.scala10
-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