[PL] Fix: Allow IrEnumConstructorCall with constructed class with kind=ENUM_ENTRY
This commit is contained in:
committed by
Space Team
parent
66532d714e
commit
0f17191e0e
+2
-1
@@ -519,7 +519,8 @@ internal class PartiallyLinkedIrTreePatcher(
|
|||||||
checkReferencedDeclaration(symbol)
|
checkReferencedDeclaration(symbol)
|
||||||
?: checkExpressionTypeArguments()
|
?: checkExpressionTypeArguments()
|
||||||
?: checkReferencedDeclarationType(expression.symbol.owner.parentAsClass, "enum class") { constructedClass ->
|
?: checkReferencedDeclarationType(expression.symbol.owner.parentAsClass, "enum class") { constructedClass ->
|
||||||
constructedClass.kind == ClassKind.ENUM_CLASS || constructedClass.symbol == builtIns.enumClass
|
constructedClass.kind == ClassKind.ENUM_CLASS || constructedClass.kind == ClassKind.ENUM_ENTRY
|
||||||
|
|| constructedClass.symbol == builtIns.enumClass
|
||||||
}
|
}
|
||||||
?: checkArgumentsAndValueParameters(symbol.owner)
|
?: checkArgumentsAndValueParameters(symbol.owner)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,3 +220,25 @@ fun instantiationOfAbstractClass() {
|
|||||||
// abstract classes except for from their direct inheritors.
|
// abstract classes except for from their direct inheritors.
|
||||||
ClassToAbstractClass().getGreeting()
|
ClassToAbstractClass().getGreeting()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is required to check that enum entry classes are correctly handled in partial linkage.
|
||||||
|
enum class StableEnum {
|
||||||
|
FOO {
|
||||||
|
val x = "OK"
|
||||||
|
|
||||||
|
inner class Inner {
|
||||||
|
val y = x
|
||||||
|
}
|
||||||
|
|
||||||
|
val z = Inner()
|
||||||
|
|
||||||
|
override val test: String
|
||||||
|
get() = z.y
|
||||||
|
},
|
||||||
|
BAR {
|
||||||
|
override val test = "OK"
|
||||||
|
};
|
||||||
|
|
||||||
|
abstract val test: String
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -207,4 +207,7 @@ fun box() = abiTest {
|
|||||||
expectSuccess { getFunctionalInterfaceToInterface(); "OK" }
|
expectSuccess { getFunctionalInterfaceToInterface(); "OK" }
|
||||||
|
|
||||||
expectFailure(linkage("Constructor 'ClassToAbstractClass.<init>' can not be called: Can not instantiate abstract class 'ClassToAbstractClass'")) { instantiationOfAbstractClass() }
|
expectFailure(linkage("Constructor 'ClassToAbstractClass.<init>' can not be called: Can not instantiate abstract class 'ClassToAbstractClass'")) { instantiationOfAbstractClass() }
|
||||||
|
|
||||||
|
expectSuccess { StableEnum.FOO.test }
|
||||||
|
expectSuccess { StableEnum.BAR.test }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user