[JVM_IR] Fix mangling of inline class inherited interface methods.

^KT-49864 Fixed
This commit is contained in:
Mads Ager
2021-11-24 15:07:33 +01:00
committed by teamcityserver
parent 887e91328f
commit 09da67767e
8 changed files with 81 additions and 3 deletions
@@ -21219,6 +21219,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethod.kt")
public void testInlineClassInheritingDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethod.kt");
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethodAll.kt")
public void testInlineClassInheritingDefaultMethodAll() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethodAll.kt");
}
@Test
@TestMetadata("javaDefaultMethod.kt")
public void testJavaDefaultMethod() throws Exception {
@@ -72,9 +72,8 @@ class MemoizedInlineClassReplacements(
when {
it.isRemoveAtSpecialBuiltinStub() ->
null
it.isInlineClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod() ->
null
it.origin == IrDeclarationOrigin.IR_BUILTINS_STUB ->
it.isInlineClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod() ||
it.origin == IrDeclarationOrigin.IR_BUILTINS_STUB ->
createMethodReplacement(it)
else ->
createStaticReplacement(it)
@@ -0,0 +1,10 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
interface I {
fun foo(): A = A("OK")
}
inline class A(val x: String): I { }
fun box() = A("").foo().x
@@ -0,0 +1,11 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
interface I {
fun foo(): A = A("OK")
}
inline class A(val x: String): I { }
fun box() = A("").foo().x
@@ -21057,6 +21057,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethod.kt")
public void testInlineClassInheritingDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethod.kt");
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethodAll.kt")
public void testInlineClassInheritingDefaultMethodAll() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethodAll.kt");
}
@Test
@TestMetadata("javaDefaultMethod.kt")
public void testJavaDefaultMethod() throws Exception {
@@ -21219,6 +21219,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethod.kt")
public void testInlineClassInheritingDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethod.kt");
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethodAll.kt")
public void testInlineClassInheritingDefaultMethodAll() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethodAll.kt");
}
@Test
@TestMetadata("javaDefaultMethod.kt")
public void testJavaDefaultMethod() throws Exception {
@@ -17550,6 +17550,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@TestMetadata("inlineClassInheritingDefaultMethod.kt")
public void testInlineClassInheritingDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethod.kt");
}
@TestMetadata("inlineClassInheritingDefaultMethodAll.kt")
public void testInlineClassInheritingDefaultMethodAll() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethodAll.kt");
}
@TestMetadata("javaDefaultMethod.kt")
public void testJavaDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/javaDefaultMethod.kt");
@@ -21440,6 +21440,18 @@ public class NativeExtBlackBoxTestGenerated extends AbstractNativeBlackBoxTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethod.kt")
public void testInlineClassInheritingDefaultMethod() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethod.kt");
}
@Test
@TestMetadata("inlineClassInheritingDefaultMethodAll.kt")
public void testInlineClassInheritingDefaultMethodAll() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/inlineClassInheritingDefaultMethodAll.kt");
}
@Test
@TestMetadata("javaDefaultMethod.kt")
public void testJavaDefaultMethod() throws Exception {