JVM_IR: Box generic Result parameter in suspend lambda

#KT-44527 Fixed
This commit is contained in:
Ilmir Usmanov
2021-02-02 18:36:28 +01:00
parent a30a961cf5
commit 02f845636e
9 changed files with 55 additions and 1 deletions
@@ -9621,6 +9621,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@Test
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
@@ -39,7 +39,8 @@ abstract class PromisedValue(val codegen: ExpressionCodegen, val type: Type, val
// Boxing and unboxing kotlin.Result leads to CCE in generated code
val doNotCoerceKotlinResultInContinuation =
(codegen.irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.CONTINUATION_CLASS ||
codegen.irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA)
(codegen.irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA &&
!codegen.irFunction.isInvokeSuspendOfLambda()))
&& (irType.isKotlinResult() || irTarget.isKotlinResult())
// Coerce inline classes
@@ -0,0 +1,15 @@
// WITH_RUNTIME
// IGNORE_BACKEND: JS_IR
import kotlin.coroutines.*
fun box(): String {
suspend {
listOf(Result.success(true)).forEach {
println(it.getOrNull())
}
}.startCoroutine(Continuation(EmptyCoroutineContext) {
it.getOrThrow()
})
return "OK"
}
@@ -9621,6 +9621,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@Test
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@Test
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
@@ -9621,6 +9621,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@Test
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
@@ -7637,6 +7637,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/nonLocalReturn.kt");
@@ -6872,6 +6872,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
}
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/nonLocalReturn.kt");
@@ -6357,6 +6357,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
}
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/nonLocalReturn.kt");
@@ -6357,6 +6357,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
}
@TestMetadata("genericParameterResult.kt")
public void testGenericParameterResult() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/genericParameterResult.kt");
}
@TestMetadata("nonLocalReturn.kt")
public void testNonLocalReturn() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/inlineClasses/nonLocalReturn.kt");