diff --git a/compiler/testData/compileKotlinAgainstKotlin/coroutines/builder.kt b/compiler/testData/compileKotlinAgainstKotlin/coroutines/builder.kt new file mode 100644 index 00000000000..573fa7b5838 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/coroutines/builder.kt @@ -0,0 +1,32 @@ +// FILE: A.kt +// LANGUAGE_VERSION: 1.2 +import kotlin.coroutines.experimental.* + +fun builder(c: suspend () -> String): String { + var res = "FAIL" + c.startCoroutine(object : Continuation { + override val context = EmptyCoroutineContext + override fun resume(value: String) { + res = value + } + override fun resumeWithException(exception: Throwable) { + throw exception + } + }) + return res +} + +// FILE: B.kt +// LANGUAGE_VERSION: 1.3 +import kotlin.coroutines.experimental.* + +fun ok(continuation: Continuation): Any? { + return "OK" +} + +fun box(): String { + if (builder(::ok) != "OK") return "FAIL 1" + if (builder { cont: Continuation -> "OK" } != "OK") return "FAIL 2" + if (builder(fun (cont: Continuation): Any? = "OK") != "OK") return "FAIL 2" + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index a617a7bdcd5..7486a610f5b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -290,6 +290,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/coroutines"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("builder.kt") + public void testBuilder() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/coroutines/builder.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/coroutines/simple.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/suspendFunctionTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/suspendFunctionTypes.kt index 90b3e45aa0f..bba3eb7a625 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/suspendFunctionTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/suspendFunctionTypes.kt @@ -89,7 +89,7 @@ fun transformRuntimeFunctionTypeToSuspendFunction(funType: KotlinType, isRelease if (!isContinuation(continuationArgumentType.constructor.declarationDescriptor?.fqNameSafe, isReleaseCoroutines) || continuationArgumentType.arguments.size != 1 ) { - return null + return funType as? SimpleType } val suspendReturnType = continuationArgumentType.arguments.single().type