JVM_IR. Do not unbox Result in inline lambda
Since JVM_IR generates inline lambdas differently from old backend, in this case, it generates them as normal functions. Thus, there is no need to unbox the lambda argument. #KT-44671 Fixed
This commit is contained in:
+6
@@ -10685,6 +10685,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
|
||||
+1
@@ -626,6 +626,7 @@ class ExpressionCodegen(
|
||||
// bridge to unbox it. Instead, we unbox it in the non-mangled function manually.
|
||||
private fun unboxResultIfNeeded(arg: IrGetValue) {
|
||||
if (arg.type.erasedUpperBound.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME) return
|
||||
if (irFunction.origin == IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA) return
|
||||
if (!onlyResultInlineClassParameters()) return
|
||||
if (irFunction !is IrSimpleFunction) return
|
||||
// Skip Result's methods
|
||||
|
||||
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.coroutines.intrinsics.*
|
||||
import kotlin.coroutines.*
|
||||
|
||||
fun myRun(c: () -> Unit) {
|
||||
c()
|
||||
}
|
||||
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun box(): String {
|
||||
var contiuation: Continuation<Unit>? = null
|
||||
val c: suspend () -> Unit = {
|
||||
suspendCoroutine {
|
||||
contiuation = it
|
||||
}
|
||||
}
|
||||
|
||||
var exception: Throwable? = null
|
||||
myRun {
|
||||
c.startCoroutineUninterceptedOrReturn(Continuation(EmptyCoroutineContext) {
|
||||
exception = it.exceptionOrNull()
|
||||
})
|
||||
}
|
||||
|
||||
contiuation?.resumeWithException(RuntimeException("OK"))
|
||||
|
||||
return exception!!.message!!
|
||||
}
|
||||
+6
@@ -10685,6 +10685,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
|
||||
+6
@@ -10685,6 +10685,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
|
||||
+5
@@ -8558,6 +8558,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt");
|
||||
|
||||
js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java
Generated
+5
@@ -7668,6 +7668,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt");
|
||||
|
||||
Generated
+5
@@ -7153,6 +7153,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt");
|
||||
|
||||
Generated
+5
@@ -7153,6 +7153,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("resultExceptionOrNullInLambda.kt")
|
||||
public void testResultExceptionOrNullInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/resultExceptionOrNullInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("startCoroutine.kt")
|
||||
public void testStartCoroutine() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt");
|
||||
|
||||
Reference in New Issue
Block a user