FIR2IR: distinguish constructor when picking return target

This commit is contained in:
Jinseong Jeon
2020-10-03 00:50:22 -07:00
committed by Mikhail Glukhikh
parent 5ab822be36
commit aa488eabc9
2 changed files with 8 additions and 2 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
import org.jetbrains.kotlin.ir.declarations.*
@@ -97,7 +98,13 @@ class Fir2IrConversionScope {
fun returnTarget(expression: FirReturnExpression, declarationStorage: Fir2IrDeclarationStorage): IrFunction {
val firTarget = expression.target.labeledElement
val irTarget = (firTarget as? FirFunction)?.let { declarationStorage.getCachedIrFunction(it) }
val irTarget = (firTarget as? FirFunction)?.let {
if (it is FirConstructor) {
declarationStorage.getCachedIrConstructor(it)
} else {
declarationStorage.getCachedIrFunction(it)
}
}
for (potentialTarget in functionStack.asReversed()) {
if (potentialTarget == irTarget) {
return potentialTarget
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
inline fun run2(block: () -> Unit) = block()
class A {