From 66ab1c484c4e856aa7ad4ec698f9cd7dd86fa287 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Wed, 13 Jan 2016 14:38:38 +0300 Subject: [PATCH] StackOverflow fix on type remapping --- .../kotlin/codegen/inline/AsmTypeRemapper.kt | 2 +- .../codegen/boxInline/signature/recursion.1.kt | 18 ++++++++++++++++++ .../codegen/boxInline/signature/recursion.2.kt | 6 ++++++ .../BlackBoxInlineCodegenTestGenerated.java | 6 ++++++ ...KotlinAgainstInlineKotlinTestGenerated.java | 6 ++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/boxInline/signature/recursion.1.kt create mode 100644 compiler/testData/codegen/boxInline/signature/recursion.2.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AsmTypeRemapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AsmTypeRemapper.kt index 6afda8e0d13..d9fe1fadf0f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AsmTypeRemapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AsmTypeRemapper.kt @@ -45,7 +45,7 @@ class AsmTypeRemapper(val typeRemapper: TypeRemapper, val isDefaultGeneration: B return super.visitTypeVariable(mapping.newName) } // else TypeVariable is replaced by concrete type - SignatureReader(mapping.signature).accept(this) + SignatureReader(mapping.signature).accept(v) } override fun visitFormalTypeParameter(name: String) { diff --git a/compiler/testData/codegen/boxInline/signature/recursion.1.kt b/compiler/testData/codegen/boxInline/signature/recursion.1.kt new file mode 100644 index 00000000000..e28d59a2e3d --- /dev/null +++ b/compiler/testData/codegen/boxInline/signature/recursion.1.kt @@ -0,0 +1,18 @@ +//NO_CHECK_LAMBDA_INLINING + +import test.* +import java.util.* + + +class I(val s: A) +class A(val elements: List>) { + val p = elements.sortedBy { it.hashCode() } +} + +fun box(): String { + + A(listOf(I("1"), I("2"), I("3"))).p + + return "OK" +} + diff --git a/compiler/testData/codegen/boxInline/signature/recursion.2.kt b/compiler/testData/codegen/boxInline/signature/recursion.2.kt new file mode 100644 index 00000000000..3fc6bd82dca --- /dev/null +++ b/compiler/testData/codegen/boxInline/signature/recursion.2.kt @@ -0,0 +1,6 @@ +package test + + +inline fun stub() { + +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxInlineCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxInlineCodegenTestGenerated.java index 8a39cbed71c..5cb566b854d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxInlineCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxInlineCodegenTestGenerated.java @@ -1423,6 +1423,12 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/signature"), Pattern.compile("^(.+)\\.1.kt$"), true); } + @TestMetadata("recursion.1.kt") + public void testRecursion() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/signature/recursion.1.kt"); + doTestMultiFileWithInlineCheck(fileName); + } + @TestMetadata("sameFormalParameterName.1.kt") public void testSameFormalParameterName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/signature/sameFormalParameterName.1.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstInlineKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstInlineKotlinTestGenerated.java index 39411070e07..b21ddf44036 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstInlineKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstInlineKotlinTestGenerated.java @@ -1423,6 +1423,12 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/signature"), Pattern.compile("^(.+)\\.1.kt$"), true); } + @TestMetadata("recursion.1.kt") + public void testRecursion() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/signature/recursion.1.kt"); + doBoxTestWithInlineCheck(fileName); + } + @TestMetadata("sameFormalParameterName.1.kt") public void testSameFormalParameterName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/signature/sameFormalParameterName.1.kt");