Native: quick fix lazy init boxing issue
FileInitializersLowering shouldn't expect codegen to initialize field statically if constant literal is going to be boxed ^KT-48364
This commit is contained in:
committed by
Space
parent
9dd8266bee
commit
ff46a63ffa
+7
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConst
|
import org.jetbrains.kotlin.ir.expressions.IrConst
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||||
@@ -113,5 +114,10 @@ internal class FileInitializersLowering(val context: Context) : FileLoweringPass
|
|||||||
get() = hasNonConstInitializer || needsGCRegistration(context)
|
get() = hasNonConstInitializer || needsGCRegistration(context)
|
||||||
|
|
||||||
private val IrField.hasNonConstInitializer: Boolean
|
private val IrField.hasNonConstInitializer: Boolean
|
||||||
get() = initializer?.expression.let { it != null && it !is IrConst<*> }
|
get() {
|
||||||
|
val it = initializer?.expression ?: return false
|
||||||
|
if (it !is IrConst<*>) return true
|
||||||
|
if (it.kind != IrConstKind.Null && it.type != this.type) return true // Might be boxed, so codegen won't treat it as const.
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user