Fixed bug in post-inline lowering
This commit is contained in:
committed by
Sergey Bogolepov
parent
2a78a8dade
commit
d04ee83e76
+10
-6
@@ -17,10 +17,9 @@
|
|||||||
package org.jetbrains.kotlin.backend.konan.lower
|
package org.jetbrains.kotlin.backend.konan.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.lower.IrBuildingTransformer
|
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
||||||
import org.jetbrains.kotlin.backend.common.lower.at
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWith
|
|
||||||
import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWithStarProjections
|
import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWithStarProjections
|
||||||
import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWithoutArguments
|
import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWithoutArguments
|
||||||
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
||||||
@@ -40,11 +39,13 @@ internal class PostInlineLowering(val context: Context) : FileLoweringPass {
|
|||||||
private val symbols get() = context.ir.symbols
|
private val symbols get() = context.ir.symbols
|
||||||
|
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
irFile.transformChildrenVoid(object : IrBuildingTransformer(context) {
|
irFile.transformChildrenVoid(object : IrElementTransformerVoidWithContext() {
|
||||||
|
|
||||||
override fun visitClassReference(expression: IrClassReference): IrExpression {
|
override fun visitClassReference(expression: IrClassReference): IrExpression {
|
||||||
expression.transformChildrenVoid()
|
expression.transformChildrenVoid()
|
||||||
builder.at(expression)
|
|
||||||
|
val builder = context.createIrBuilder(currentScope!!.scope.scopeOwnerSymbol,
|
||||||
|
expression.startOffset, expression.endOffset)
|
||||||
|
|
||||||
val typeArgument = expression.symbol.typeWithStarProjections
|
val typeArgument = expression.symbol.typeWithStarProjections
|
||||||
|
|
||||||
@@ -55,9 +56,12 @@ internal class PostInlineLowering(val context: Context) : FileLoweringPass {
|
|||||||
|
|
||||||
override fun visitGetClass(expression: IrGetClass): IrExpression {
|
override fun visitGetClass(expression: IrGetClass): IrExpression {
|
||||||
expression.transformChildrenVoid()
|
expression.transformChildrenVoid()
|
||||||
builder.at(expression)
|
|
||||||
|
val builder = context.createIrBuilder(currentScope!!.scope.scopeOwnerSymbol,
|
||||||
|
expression.startOffset, expression.endOffset)
|
||||||
|
|
||||||
val typeArgument = expression.argument.type
|
val typeArgument = expression.argument.type
|
||||||
|
|
||||||
return builder.irCall(symbols.kClassImplConstructor, listOf(typeArgument)).apply {
|
return builder.irCall(symbols.kClassImplConstructor, listOf(typeArgument)).apply {
|
||||||
val typeInfo = builder.irCall(symbols.getObjectTypeInfo).apply {
|
val typeInfo = builder.irCall(symbols.getObjectTypeInfo).apply {
|
||||||
putValueArgument(0, expression.argument)
|
putValueArgument(0, expression.argument)
|
||||||
|
|||||||
@@ -1231,6 +1231,11 @@ task kclass1(type: RunKonanTest) {
|
|||||||
source = "codegen/kclass/kclass1.kt"
|
source = "codegen/kclass/kclass1.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task kclassEnumArgument(type: RunKonanTest) {
|
||||||
|
goldValue = "String\n"
|
||||||
|
source = "codegen/kclass/kClassEnumArgument.kt"
|
||||||
|
}
|
||||||
|
|
||||||
task coroutines_simple(type: RunKonanTest) {
|
task coroutines_simple(type: RunKonanTest) {
|
||||||
goldValue = "42\n"
|
goldValue = "42\n"
|
||||||
source = "codegen/coroutines/simple.kt"
|
source = "codegen/coroutines/simple.kt"
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package codegen.kclass.kClassEnumArgument
|
||||||
|
|
||||||
|
import kotlin.test.*
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
enum class E(val arg: KClass<*>?) {
|
||||||
|
A(null as KClass<*>?),
|
||||||
|
B(String::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun runTest() {
|
||||||
|
println(E.B.arg?.simpleName)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user