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.expressions.IrBlockBody
|
||||
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.util.SYNTHETIC_OFFSET
|
||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||
@@ -113,5 +114,10 @@ internal class FileInitializersLowering(val context: Context) : FileLoweringPass
|
||||
get() = hasNonConstInitializer || needsGCRegistration(context)
|
||||
|
||||
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