[JVM IR] Fix issue with suspend functions with @JvmOverloads.

This commit is contained in:
Mark Punzalan
2020-02-18 22:48:07 -08:00
committed by Ilmir Usmanov
parent c289612e57
commit 3d51af2935
8 changed files with 87 additions and 3 deletions
@@ -116,6 +116,8 @@ internal fun IrFunction.isInvokeOfSuspendCallableReference(): Boolean = isSuspen
internal fun IrFunction.isKnownToBeTailCall(): Boolean =
when (origin) {
IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER,
JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER,
JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE,
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR,
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE,
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC,
@@ -142,8 +142,6 @@ open class FunctionCodegen(
origin != IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA &&
// This is just a template for inliner
origin != JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE &&
// This is just a bridge to the function with the continuation
origin != JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE &&
// Continuations are generated for suspendImpls
parentAsClass.functions.none {
it.name.asString() == name.asString() + SUSPEND_IMPL_NAME_SUFFIX &&
@@ -652,7 +652,8 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
function.parentAsClass.origin == JvmLoweredDeclarationOrigin.FUNCTION_REFERENCE_IMPL ||
function.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER ||
function.origin == JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE ||
function.origin == JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE
function.origin == JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE ||
function.origin == JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER
private fun skip(function: IrFunction) =
!function.isSuspend ||