From 611c4fe05263b7908a695a7284b7e4ec3cb1cea5 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Tue, 14 Apr 2020 21:10:23 +0300 Subject: [PATCH] JVM_IR: repair super calls to methods of Any --- .../kotlin/backend/jvm/codegen/MethodSignatureMapper.kt | 5 ++++- compiler/testData/codegen/bytecodeText/superToString.kt | 9 +++++++++ .../kotlin/codegen/BytecodeTextTestGenerated.java | 5 +++++ .../kotlin/codegen/ir/IrBytecodeTextTestGenerated.java | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/bytecodeText/superToString.kt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt index 4ca8e89edb6..280d1485e97 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.jvm.codegen +import org.jetbrains.kotlin.backend.common.ir.isMethodOfAny import org.jetbrains.kotlin.backend.common.ir.isTopLevel import org.jetbrains.kotlin.backend.common.lower.allOverridden import org.jetbrains.kotlin.backend.common.lower.parentsWithSelf @@ -358,7 +359,9 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { continue } if (isSuperCall && !current.parentAsClass.isInterface && - current.resolveFakeOverride()?.isCompiledToJvmDefault(context.state.jvmDefaultMode) != true + current.resolveFakeOverride()?.run { + isMethodOfAny() || !isCompiledToJvmDefault(context.state.jvmDefaultMode) + } == true ) { return current } diff --git a/compiler/testData/codegen/bytecodeText/superToString.kt b/compiler/testData/codegen/bytecodeText/superToString.kt new file mode 100644 index 00000000000..b4ae402b7fa --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/superToString.kt @@ -0,0 +1,9 @@ +interface A + +abstract class Base: A + +class Derived : Base() { + override fun toString() = super.toString() +} + +// 1 INVOKESPECIAL Base.toString \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 9503bb59310..1e6bd1a49e5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -409,6 +409,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt"); } + @TestMetadata("superToString.kt") + public void testSuperToString() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/superToString.kt"); + } + @TestMetadata("suspendCoroutineUninterceptedOrReturn.kt") public void testSuspendCoroutineUninterceptedOrReturn() throws Exception { runTest("compiler/testData/codegen/bytecodeText/suspendCoroutineUninterceptedOrReturn.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 2450225c698..a8f9535e53b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -409,6 +409,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt"); } + @TestMetadata("superToString.kt") + public void testSuperToString() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/superToString.kt"); + } + @TestMetadata("suspendCoroutineUninterceptedOrReturn.kt") public void testSuspendCoroutineUninterceptedOrReturn() throws Exception { runTest("compiler/testData/codegen/bytecodeText/suspendCoroutineUninterceptedOrReturn.kt");