From e7410348a76a3886f3a53897bfbca30b27f49b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Mon, 2 Sep 2019 16:40:40 +0200 Subject: [PATCH] JVM IR: Fix visibility for @InlineOnly functions --- .../kotlin/backend/jvm/codegen/FunctionCodegen.kt | 2 +- .../kotlin/backend/jvm/codegen/irCodegenUtils.kt | 8 ++++---- compiler/testData/writeFlags/inline/inlineOnly.kt | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) 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 1f8eae1d485..79a8f168540 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 @@ -106,7 +106,7 @@ open class FunctionCodegen( } } - val visibility = AsmUtil.getVisibilityAccessFlag(irFunction.visibility) ?: error("Unmapped visibility ${irFunction.visibility}") + val visibility = irFunction.getVisibilityAccessFlag() val staticFlag = if (isStatic) Opcodes.ACC_STATIC else 0 val varargFlag = if (irFunction.valueParameters.any { it.varargElementType != null }) Opcodes.ACC_VARARGS else 0 val deprecation = irFunction.deprecationFlags 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 3d381ea6516..9c72f2e6c63 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 @@ -167,7 +167,7 @@ private fun IrClass.innerAccessFlagsForModalityAndKind(): Int { return 0 } -private fun IrDeclarationWithVisibility.getVisibilityAccessFlag(kind: OwnerKind? = null): Int = +fun IrDeclarationWithVisibility.getVisibilityAccessFlag(kind: OwnerKind? = null): Int = specialCaseVisibility(kind) ?: visibilityToAccessFlag[visibility] ?: throw IllegalStateException("$visibility is not a valid visibility in backend for ${ir2string(this)}") @@ -223,9 +223,9 @@ private fun IrDeclarationWithVisibility.specialCaseVisibility(kind: OwnerKind?): // if (memberDescriptor is ConstructorDescriptor && isAnonymousObject(memberDescriptor.containingDeclaration)) { // return getVisibilityAccessFlagForAnonymous(memberDescriptor.containingDeclaration as ClassDescriptor) // } - if (this is IrConstructor && parentAsClass.isAnonymousObject) { - return parentAsClass.getVisibilityAccessFlagForAnonymous() - } +// if (this is IrConstructor && parentAsClass.isAnonymousObject) { +// return parentAsClass.getVisibilityAccessFlagForAnonymous() +// } // TODO: when is this applicable? // if (memberDescriptor is SyntheticJavaPropertyDescriptor) { diff --git a/compiler/testData/writeFlags/inline/inlineOnly.kt b/compiler/testData/writeFlags/inline/inlineOnly.kt index 3da64fbc274..24bec85e884 100644 --- a/compiler/testData/writeFlags/inline/inlineOnly.kt +++ b/compiler/testData/writeFlags/inline/inlineOnly.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR class MyClass { @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") @kotlin.internal.InlineOnly