Skip to content

Commit a018159

Browse files
authored
Merge pull request #13944 from KacperFKorban/fix-i13941
Don't lift try-catch statements that are already in local functions
2 parents 7ce60e1 + abd4998 commit a018159

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

compiler/src/dotty/tools/dotc/transform/LiftTry.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class LiftTry extends MiniPhase with IdentityDenotTransformer { thisPhase =>
4444
override def prepareForApply(tree: Apply)(using Context): Context =
4545
liftingCtx(true)
4646

47+
override def prepareForDefDef(tree: DefDef)(using Context): Context =
48+
liftingCtx(false)
49+
4750
override def prepareForValDef(tree: ValDef)(using Context): Context =
4851
if !tree.symbol.exists
4952
|| tree.symbol.isSelfSym

tests/pos/i13941.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import scala.annotation.tailrec
2+
3+
object A {
4+
def b = Option("a").map { x =>
5+
@tailrec
6+
def loop(): Int = {
7+
try
8+
2
9+
catch
10+
case _: Throwable =>
11+
loop()
12+
}
13+
x
14+
}
15+
}

0 commit comments

Comments
 (0)