JVM IR: Fix visibility for @InlineOnly functions

This commit is contained in:
Steven Schäfer
2019-09-02 16:40:40 +02:00
committed by Alexander Udalov
parent ee45933e33
commit e7410348a7
3 changed files with 5 additions and 6 deletions
@@ -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 staticFlag = if (isStatic) Opcodes.ACC_STATIC else 0
val varargFlag = if (irFunction.valueParameters.any { it.varargElementType != null }) Opcodes.ACC_VARARGS else 0 val varargFlag = if (irFunction.valueParameters.any { it.varargElementType != null }) Opcodes.ACC_VARARGS else 0
val deprecation = irFunction.deprecationFlags val deprecation = irFunction.deprecationFlags
@@ -167,7 +167,7 @@ private fun IrClass.innerAccessFlagsForModalityAndKind(): Int {
return 0 return 0
} }
private fun IrDeclarationWithVisibility.getVisibilityAccessFlag(kind: OwnerKind? = null): Int = fun IrDeclarationWithVisibility.getVisibilityAccessFlag(kind: OwnerKind? = null): Int =
specialCaseVisibility(kind) specialCaseVisibility(kind)
?: visibilityToAccessFlag[visibility] ?: visibilityToAccessFlag[visibility]
?: throw IllegalStateException("$visibility is not a valid visibility in backend for ${ir2string(this)}") ?: 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)) { // if (memberDescriptor is ConstructorDescriptor && isAnonymousObject(memberDescriptor.containingDeclaration)) {
// return getVisibilityAccessFlagForAnonymous(memberDescriptor.containingDeclaration as ClassDescriptor) // return getVisibilityAccessFlagForAnonymous(memberDescriptor.containingDeclaration as ClassDescriptor)
// } // }
if (this is IrConstructor && parentAsClass.isAnonymousObject) { // if (this is IrConstructor && parentAsClass.isAnonymousObject) {
return parentAsClass.getVisibilityAccessFlagForAnonymous() // return parentAsClass.getVisibilityAccessFlagForAnonymous()
} // }
// TODO: when is this applicable? // TODO: when is this applicable?
// if (memberDescriptor is SyntheticJavaPropertyDescriptor) { // if (memberDescriptor is SyntheticJavaPropertyDescriptor) {
-1
View File
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
class MyClass { class MyClass {
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly @kotlin.internal.InlineOnly