diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt index df8d261384a..4dbe8f192dc 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt @@ -174,7 +174,8 @@ open class FunctionCodegen( val nativeFlag = if (irFunction.isExternal) Opcodes.ACC_NATIVE else 0 val syntheticFlag = if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) || - (irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline) + (irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline) || + irFunction.isReifiable() ) Opcodes.ACC_SYNTHETIC else 0 val strictFpFlag = if (irFunction.hasAnnotation(STRICTFP_ANNOTATION_FQ_NAME)) Opcodes.ACC_STRICT else 0 diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt index bf595b73515..adec279b276 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt @@ -181,6 +181,10 @@ private fun IrDeclarationWithVisibility.specialCaseVisibility(kind: OwnerKind?): } // if (memberDescriptor.isEffectivelyInlineOnly()) { + if (this is IrFunction && isReifiable()) { + return Opcodes.ACC_PUBLIC + } + if (isEffectivelyInlineOnly()) { return Opcodes.ACC_PRIVATE } @@ -290,7 +294,7 @@ private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean = fun IrFunction.isInlineOnly() = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) -private fun IrFunction.isReifiable() = typeParameters.any { it.isReified } +fun IrFunction.isReifiable() = typeParameters.any { it.isReified } // Borrowed with modifications from ImplementationBodyCodegen.java diff --git a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed_ir.txt b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed_ir.txt index 1f33a62c35c..5cb513d5e01 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed_ir.txt @@ -7,8 +7,8 @@ public final class Foo { private final method generic$$forInline(p0: kotlin.coroutines.Continuation): java.lang.Object public final @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public final @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object - private final @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object - private final @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic final @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic final @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object private final method privateInline(p0: kotlin.coroutines.Continuation): java.lang.Object private final @kotlin.internal.InlineOnly @org.jetbrains.annotations.Nullable method shouldNotHaveSuffix(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object private final method simple$$forInline(p0: kotlin.Unit, p1: kotlin.coroutines.Continuation): java.lang.Object @@ -25,8 +25,8 @@ public final class SimpleNamedKt { private final static method generic$$forInline(p0: kotlin.coroutines.Continuation): java.lang.Object public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public final static @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object - private final static @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object - private final static @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic final static @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic final static @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object private final static method privateInline(p0: kotlin.coroutines.Continuation): java.lang.Object private final static @kotlin.internal.InlineOnly @org.jetbrains.annotations.Nullable method shouldNotHaveSuffix(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object private final static method simple$$forInline(p0: kotlin.Unit, p1: kotlin.coroutines.Continuation): java.lang.Object