diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt
index b368064..5b9e682 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt
@@ -91,11 +91,9 @@
     inline fun <R> withAssignmentRhs(block: () -> R): R {
         val oldMode = this.isInsideAssignmentRhs
         this.isInsideAssignmentRhs = true
-        return try {
-            block()
-        } finally {
-            this.isInsideAssignmentRhs = oldMode
-        }
+        val result = block()
+        this.isInsideAssignmentRhs = oldMode
+        return result
     }
 
     /**
@@ -109,11 +107,8 @@
     inline fun withClassHeader(clazz: FirRegularClass, action: () -> Unit) {
         val old = insideClassHeader
         insideClassHeader = true
-        try {
-            withContainer(clazz, action)
-        } finally {
-            insideClassHeader = old
-        }
+        withContainer(clazz, action)
+        insideClassHeader = old
     }
 
     val anonymousFunctionsAnalyzedInDependentContext: MutableSet<FirFunctionSymbol<*>> = mutableSetOf()
@@ -129,30 +124,24 @@
     inline fun <T> withTowerDataContexts(newContexts: FirRegularTowerDataContexts, f: () -> T): T {
         val old = regularTowerDataContexts
         regularTowerDataContexts = newContexts
-        return try {
-            f()
-        } finally {
-            regularTowerDataContexts = old
-        }
+        val result = f()
+        regularTowerDataContexts = old
+        return result
     }
 
     inline fun <R> withLambdaBeingAnalyzedInDependentContext(lambda: FirAnonymousFunctionSymbol, l: () -> R): R {
         anonymousFunctionsAnalyzedInDependentContext.add(lambda)
-        return try {
-            l()
-        } finally {
-            anonymousFunctionsAnalyzedInDependentContext.remove(lambda)
-        }
+        val result = l()
+        anonymousFunctionsAnalyzedInDependentContext.remove(lambda)
+        return result
     }
 
     @PrivateForInline
     inline fun <T> withContainer(declaration: FirDeclaration, f: () -> T): T {
         containers.add(declaration)
-        return try {
-            f()
-        } finally {
-            containers.removeLast()
-        }
+        val result = f()
+        containers.removeLast()
+        return result
     }
 
     @PrivateForInline
@@ -160,31 +149,25 @@
         val oldContainingClass = containingRegularClass
         containers.add(declaration)
         containingRegularClass = declaration
-        return try {
-            f()
-        } finally {
-            containers.removeLast()
-            containingRegularClass = oldContainingClass
-        }
+        val result = f()
+        containers.removeLast()
+        containingRegularClass = oldContainingClass
+        return result
     }
 
     inline fun <T> withContainingClass(declaration: FirClass, f: () -> T): T {
         containingClassDeclarations.add(declaration)
-        return try {
-            f()
-        } finally {
-            containingClassDeclarations.removeLast()
-        }
+        val result = f()
+        containingClassDeclarations.removeLast()
+        return result
     }
 
     @PrivateForInline
     inline fun <R> withTowerDataCleanup(l: () -> R): R {
         val initialContext = towerDataContext
-        return try {
-            l()
-        } finally {
-            replaceTowerDataContext(initialContext)
-        }
+        val result = l()
+        replaceTowerDataContext(initialContext)
+        return result
     }
 
     @PrivateForInline
@@ -198,11 +181,9 @@
     @PrivateForInline
     inline fun <R> withTowerDataModeCleanup(l: () -> R): R {
         val initialMode = towerDataMode
-        return try {
-            l()
-        } finally {
-            towerDataMode = initialMode
-        }
+        val result = l()
+        towerDataMode = initialMode
+        return result
     }
 
     @PrivateForInline
@@ -365,11 +346,9 @@
     inline fun <R, S : FirInferenceSession> withInferenceSession(inferenceSession: S, block: S.() -> R): R {
         val oldSession = this.inferenceSession
         this.inferenceSession = inferenceSession
-        return try {
-            inferenceSession.block()
-        } finally {
-            this.inferenceSession = oldSession
-        }
+        val result = inferenceSession.block()
+        this.inferenceSession = oldSession
+        return result
     }
 
     @OptIn(PrivateForInline::class)
@@ -410,14 +389,12 @@
     ): T {
         val oldReturnTypeCalculator = this.returnTypeCalculator
         val oldTargetedLocalClasses = this.targetedLocalClasses
-        return try {
-            this.returnTypeCalculator = returnTypeCalculator
-            this.targetedLocalClasses = targetedLocalClasses
-            f()
-        } finally {
-            this.returnTypeCalculator = oldReturnTypeCalculator
-            this.targetedLocalClasses = oldTargetedLocalClasses
-        }
+        this.returnTypeCalculator = returnTypeCalculator
+        this.targetedLocalClasses = targetedLocalClasses
+        val result = f()
+        this.returnTypeCalculator = oldReturnTypeCalculator
+        this.targetedLocalClasses = oldTargetedLocalClasses
+        return result
     }
 
     @OptIn(PrivateForInline::class)
@@ -426,12 +403,10 @@
         f: () -> T,
     ): T {
         val oldReturnTypeCalculator = this.returnTypeCalculator
-        return try {
-            this.returnTypeCalculator = returnTypeCalculator
-            f()
-        } finally {
-            this.returnTypeCalculator = oldReturnTypeCalculator
-        }
+        this.returnTypeCalculator = returnTypeCalculator
+        val result = f()
+        this.returnTypeCalculator = oldReturnTypeCalculator
+        return result
     }
 
     // withElement PUBLIC API
