[K/N] Fix default argument lambda in suspend function code generation
This commit is contained in:
committed by
Space Team
parent
484d3ad273
commit
e655e0a809
+6
@@ -10249,6 +10249,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -10249,6 +10249,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
// WITH_STDLIB
|
||||||
|
// WITH_COROUTINES
|
||||||
|
|
||||||
|
// lowered IR can be dependent on file order here, so we will test both
|
||||||
|
|
||||||
|
// FILE: A.kt
|
||||||
|
|
||||||
|
import helpers.*
|
||||||
|
import kotlin.coroutines.*
|
||||||
|
import kotlin.coroutines.intrinsics.*
|
||||||
|
|
||||||
|
class Controller1 {
|
||||||
|
suspend fun suspendHere(block : () -> String = { "DEF" }): String = suspendCoroutineUninterceptedOrReturn { x ->
|
||||||
|
x.resume(block())
|
||||||
|
COROUTINE_SUSPENDED
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun builder1(c: suspend Controller1.() -> Unit) {
|
||||||
|
c.startCoroutine(Controller1(), EmptyContinuation)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.kt
|
||||||
|
|
||||||
|
import helpers.*
|
||||||
|
import kotlin.coroutines.*
|
||||||
|
import kotlin.coroutines.intrinsics.*
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
var result = "FAIL 1"
|
||||||
|
|
||||||
|
builder1 {
|
||||||
|
if (suspendHere() != "DEF") {
|
||||||
|
result = "FAIL"
|
||||||
|
return@builder1
|
||||||
|
}
|
||||||
|
result = suspendHere { "OK" }
|
||||||
|
}
|
||||||
|
if (result != "OK") return result
|
||||||
|
result = "FAIL 2"
|
||||||
|
|
||||||
|
builder2 {
|
||||||
|
if (suspendHere() != "DEF") {
|
||||||
|
result = "FAIL"
|
||||||
|
return@builder2
|
||||||
|
}
|
||||||
|
result = suspendHere { "OK" }
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: C.kt
|
||||||
|
|
||||||
|
import helpers.*
|
||||||
|
import kotlin.coroutines.*
|
||||||
|
import kotlin.coroutines.intrinsics.*
|
||||||
|
|
||||||
|
|
||||||
|
class Controller2 {
|
||||||
|
suspend fun suspendHere(block : () -> String = { "DEF" }): String = suspendCoroutineUninterceptedOrReturn { x ->
|
||||||
|
x.resume(block())
|
||||||
|
COROUTINE_SUSPENDED
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun builder2(c: suspend Controller2.() -> Unit) {
|
||||||
|
c.startCoroutine(Controller2(), EmptyContinuation)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
+6
@@ -10009,6 +10009,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -10249,6 +10249,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -10249,6 +10249,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+5
@@ -7877,6 +7877,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspendWithJvmOverloads.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/coroutines/delegatedSuspendMember.kt");
|
runTest("compiler/testData/codegen/box/coroutines/delegatedSuspendMember.kt");
|
||||||
|
|||||||
+6
@@ -7029,6 +7029,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -7125,6 +7125,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -7125,6 +7125,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -7125,6 +7125,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+9
@@ -316,6 +316,12 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG
|
|||||||
return KotlinObjCClassLlvmDeclarations(classInfoGlobal, bodyOffsetGlobal)
|
return KotlinObjCClassLlvmDeclarations(classInfoGlobal, bodyOffsetGlobal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitValueParameter(declaration: IrValueParameter) {
|
||||||
|
// In some cases because of inconsistencies of previous lowerings, default values can be not removed.
|
||||||
|
// If they contain class or function, they would not be processed by code generator
|
||||||
|
// So we are skipping them here too.
|
||||||
|
}
|
||||||
|
|
||||||
private tailrec fun gcd(a: Long, b: Long) : Long = if (b == 0L) a else gcd(b, a % b)
|
private tailrec fun gcd(a: Long, b: Long) : Long = if (b == 0L) a else gcd(b, a % b)
|
||||||
|
|
||||||
override fun visitField(declaration: IrField) {
|
override fun visitField(declaration: IrField) {
|
||||||
@@ -392,6 +398,9 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG
|
|||||||
else -> LLVMLinkage.LLVMInternalLinkage
|
else -> LLVMLinkage.LLVMInternalLinkage
|
||||||
}
|
}
|
||||||
val proto = LlvmFunctionProto(declaration, symbolName, this, linkage)
|
val proto = LlvmFunctionProto(declaration, symbolName, this, linkage)
|
||||||
|
context.log {
|
||||||
|
"Creating llvm function ${symbolName} for ${declaration.render()}"
|
||||||
|
}
|
||||||
proto.createLlvmFunction(context, llvm.module)
|
proto.createLlvmFunction(context, llvm.module)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
@@ -8082,6 +8082,12 @@ public class K2NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTes
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
+6
@@ -7993,6 +7993,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
|
|||||||
Generated
+5
@@ -6272,6 +6272,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
|||||||
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
runTest("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("defaultParamterLambdaInSuspend.kt")
|
||||||
|
public void testDefaultParamterLambdaInSuspend() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/coroutines/defaultParamterLambdaInSuspend.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("delegatedSuspendMember.kt")
|
@TestMetadata("delegatedSuspendMember.kt")
|
||||||
public void testDelegatedSuspendMember() throws Exception {
|
public void testDelegatedSuspendMember() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/coroutines/delegatedSuspendMember.kt");
|
runTest("compiler/testData/codegen/box/coroutines/delegatedSuspendMember.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user