FIR: fix return statement generation for Unit-returning lambdas...
for case then the expected return type is not Unit. #KT-56747 fixed
This commit is contained in:
committed by
Space Team
parent
505edb9746
commit
aa3c189d83
@@ -65,7 +65,7 @@ fun FirAnonymousFunction.addReturnToLastStatementIfNeeded() {
|
|||||||
if (lastStatement is FirReturnExpression) return
|
if (lastStatement is FirReturnExpression) return
|
||||||
|
|
||||||
val returnType = (body.typeRef as? FirResolvedTypeRef) ?: return
|
val returnType = (body.typeRef as? FirResolvedTypeRef) ?: return
|
||||||
if (returnType.isNothing || returnType.isUnit) return
|
if (returnType.isNothing) return
|
||||||
|
|
||||||
val returnTarget = FirFunctionTarget(null, isLambda = isLambda).also { it.bind(this) }
|
val returnTarget = FirFunctionTarget(null, isLambda = isLambda).also { it.bind(this) }
|
||||||
val returnExpression = buildReturnExpression {
|
val returnExpression = buildReturnExpression {
|
||||||
|
|||||||
@@ -43,7 +43,11 @@ suspend fun box() {
|
|||||||
// test.kt:16 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $this$extensionFun$iv$iv:AtomicInt=AtomicInt, $i$f$extensionFun:int=0:int
|
// test.kt:16 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $this$extensionFun$iv$iv:AtomicInt=AtomicInt, $i$f$extensionFun:int=0:int
|
||||||
// test.kt:20 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
// test.kt:20 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
||||||
// test.kt:21 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $i$a$-suspendCoroutineUninterceptedOrReturn-TestKt$suspendBar$2$iv:int=0:int
|
// test.kt:21 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $i$a$-suspendCoroutineUninterceptedOrReturn-TestKt$suspendBar$2$iv:int=0:int
|
||||||
|
|
||||||
|
// EXPECTATIONS ClassicFrontend JVM JVM_IR
|
||||||
// test.kt:22 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $i$a$-suspendCoroutineUninterceptedOrReturn-TestKt$suspendBar$2$iv:int=0:int
|
// test.kt:22 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int, $i$a$-suspendCoroutineUninterceptedOrReturn-TestKt$suspendBar$2$iv:int=0:int
|
||||||
|
|
||||||
|
// EXPECTATIONS ClassicFrontend FIR JVM JVM_IR
|
||||||
// test.kt:20 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
// test.kt:20 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
||||||
// test.kt:23 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
// test.kt:23 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null, $i$f$suspendBar:int=0:int
|
||||||
// test.kt:26 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null
|
// test.kt:26 box: $continuation:kotlin.coroutines.Continuation=TestKt$box$1, $result:java.lang.Object=null
|
||||||
|
|||||||
@@ -11,4 +11,5 @@ FILE fqName:<root> fileName:/lambdaReturningUnit.kt
|
|||||||
block: FUN_EXPR type=kotlin.Function0<kotlin.Any?> origin=LAMBDA
|
block: FUN_EXPR type=kotlin.Function0<kotlin.Any?> origin=LAMBDA
|
||||||
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Any?
|
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Any?
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
|
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.Any? declared in <root>.box'
|
||||||
|
GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ inline fun flaf(block: Function0<Any?>) {
|
|||||||
|
|
||||||
suspend fun box() {
|
suspend fun box() {
|
||||||
flaf(block = local fun <anonymous>(): Any? {
|
flaf(block = local fun <anonymous>(): Any? {
|
||||||
Unit
|
return Unit
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_K2: JS_IR
|
|
||||||
// EXPECTED_REACHABLE_NODES: 1285
|
// EXPECTED_REACHABLE_NODES: 1285
|
||||||
|
|
||||||
fun <T> rawReturnValue(fn: () -> T): Any {
|
fun <T> rawReturnValue(fn: () -> T): Any {
|
||||||
|
|||||||
Reference in New Issue
Block a user