JVM IR: Resolve fake overrides during inline class mangling

This is necessary to determine which mangling scheme to use (KT-51672).
This commit is contained in:
Steven Schäfer
2022-03-21 20:59:30 +01:00
committed by teamcity
parent 57a134c543
commit 1134dc3858
6 changed files with 48 additions and 6 deletions
@@ -21357,6 +21357,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/inlineClasses/kt51353.kt");
}
@Test
@TestMetadata("kt51672.kt")
public void testKt51672() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt51672.kt");
}
@Test
@TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception {
@@ -234,12 +234,11 @@ class MemoizedInlineClassReplacements(
val replacement = buildReplacementInner(function, replacementOrigin, noFakeOverride, useOldManglingScheme, body)
// When using the new mangling scheme we might run into dependencies using the old scheme
// for which we will fall back to the old mangling scheme as well.
if (
!useOldManglingScheme &&
replacement.name.asString().contains("-") &&
function.parentClassId?.let { classFileContainsMethod(it, replacement, context) } == false
) {
return buildReplacementInner(function, replacementOrigin, noFakeOverride, true, body)
if (!useOldManglingScheme && replacement.name.asString().contains('-') && function.parentClassId != null) {
val resolved = (function as? IrSimpleFunction)?.resolveFakeOverride(true)
if (resolved?.parentClassId?.let { classFileContainsMethod(it, replacement, context) } == false) {
return buildReplacementInner(function, replacementOrigin, noFakeOverride, true, body)
}
}
return replacement
}
+20
View File
@@ -0,0 +1,20 @@
// MODULE: lib
// WITH_STDLIB
// TARGET_BACKEND: JVM
// FILE: lib.kt
@JvmInline
value class S(val value: String)
interface A {
fun f(s: S): S = s
}
interface B : A
// MODULE: main(lib)
// FILE: main.kt
interface C : B
fun box(): String {
return object : C {}.f(S("OK")).value
}
@@ -20907,6 +20907,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/kt51353.kt");
}
@Test
@TestMetadata("kt51672.kt")
public void testKt51672() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt51672.kt");
}
@Test
@TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception {
@@ -21357,6 +21357,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/kt51353.kt");
}
@Test
@TestMetadata("kt51672.kt")
public void testKt51672() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt51672.kt");
}
@Test
@TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception {
@@ -17451,6 +17451,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/kt51353.kt");
}
@TestMetadata("kt51672.kt")
public void testKt51672() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt51672.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());