diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt index 0ade294322a..8ffab3c343f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt @@ -132,7 +132,7 @@ object InlineClassAbi { private fun IrType.asInfoForMangling(): InfoForMangling = InfoForMangling( erasedUpperBound.fqNameWhenAvailable!!.toUnsafe(), - isInline = getClass()?.isInline == true, + isInline = erasedUpperBound.isInline, isNullable = isNullable() ) diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt new file mode 100644 index 00000000000..e5b656a7f47 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt @@ -0,0 +1,8 @@ +inline class X(val x: Any?) + +interface IFoo { + fun foo(): T +} + +fun foo(x: T) {} + diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.txt new file mode 100644 index 00000000000..3a3d6d0a10e --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.txt @@ -0,0 +1,30 @@ +@kotlin.Metadata +public final class GenericChildKt { + // source: 'genericChild.kt' + public final static method foo-p_PkZps(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void +} + +@kotlin.Metadata +public interface IFoo { + // source: 'genericChild.kt' + public abstract method foo-HezMcGQ(): X +} + +@kotlin.jvm.JvmInline +@kotlin.Metadata +public final class X { + // source: 'genericChild.kt' + private final @org.jetbrains.annotations.Nullable field x: java.lang.Object + private synthetic method (p0: java.lang.Object): void + public synthetic final static method box-impl(p0: java.lang.Object): X + public static @org.jetbrains.annotations.NotNull method constructor-impl(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object + public method equals(p0: java.lang.Object): boolean + public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object): boolean + public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object): boolean + public final @org.jetbrains.annotations.Nullable method getX(): java.lang.Object + public method hashCode(): int + public static method hashCode-impl(p0: java.lang.Object): int + public method toString(): java.lang.String + public static method toString-impl(p0: java.lang.Object): java.lang.String + public synthetic final method unbox-impl(): java.lang.Object +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index a1e715c3875..090ed7ad0b9 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -1007,6 +1007,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); } + @TestMetadata("genericChild.kt") + public void testGenericChild() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index bbf3508d3cc..105820bc32b 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13489,11 +13489,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt"); } - @TestMetadata("multifileClass.kt") - public void ignoreMultifileClass() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/multifileClass.kt"); - } - @TestMetadata("simpleSecondaryConstructor.kt") public void ignoreSimpleSecondaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructor.kt"); @@ -14142,6 +14137,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/mappingOfBoxedFlexibleInlineClassType.kt"); } + @TestMetadata("multifileClass.kt") + public void testMultifileClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/multifileClass.kt"); + } + @TestMetadata("nestedInlineClass.kt") public void testNestedInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/nestedInlineClass.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index d6a7088e10f..aa513fd43fb 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -1007,6 +1007,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); } + @TestMetadata("genericChild.kt") + public void testGenericChild() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/inlineClassManglingRules.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/inlineClassManglingRules.kt index eaa3b5c795f..6864c7686cb 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/inlineClassManglingRules.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/inlineClassManglingRules.kt @@ -35,7 +35,7 @@ fun requiresFunctionNameManglingForParameterTypes(descriptor: CallableMemberDesc fun requiresFunctionNameManglingForReturnType(descriptor: CallableMemberDescriptor): Boolean { if (descriptor.containingDeclaration !is ClassDescriptor) return false val returnType = descriptor.returnType ?: return false - return returnType.isInlineClassType() + return returnType.isInlineClassType() || returnType.isTypeParameterWithUpperBoundThatRequiresMangling() } fun DeclarationDescriptor.isInlineClassThatRequiresMangling(): Boolean =