JVM IR: Use INVOKESPECIAL instead of INVOKEVIRTUAL for default private

suspend functions.

 #KT-26592
This commit is contained in:
Ilmir Usmanov
2021-02-23 15:59:51 +01:00
parent 3ee62cb1b2
commit d44799fa78
6 changed files with 58 additions and 1 deletions
@@ -403,7 +403,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
callee.dispatchReceiverParameter == null -> Opcodes.INVOKESTATIC
isSuperCall -> Opcodes.INVOKESPECIAL
isInterface && !DescriptorVisibilities.isPrivate(callee.visibility) -> Opcodes.INVOKEINTERFACE
DescriptorVisibilities.isPrivate(callee.visibility) && !callee.isSuspend -> Opcodes.INVOKESPECIAL
DescriptorVisibilities.isPrivate(callee.visibility) -> Opcodes.INVOKESPECIAL
else -> Opcodes.INVOKEVIRTUAL
}