[Native] Forbid to inline NaN values during const evaluation

This commit is contained in:
Ivan Kylchik
2023-06-23 10:56:15 +02:00
committed by Space Team
parent 8e42ccaccb
commit a4b8ab8199
3 changed files with 17 additions and 1 deletions
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.backend.konan.lower.UnboxInlineLowering
import org.jetbrains.kotlin.backend.konan.optimizations.KonanBCEForLoopBodyTransformer
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
@@ -493,7 +494,12 @@ private val objectClassesPhase = createFileLoweringPhase(
)
private val constEvaluationPhase = createFileLoweringPhase(
lowering = ::ConstEvaluationLowering,
lowering = { context: Context ->
// NaN constants has inconsistencies between IR and metadata representation,
// so inlining them can lead to incorrect behaviour. Check KT-53258 for details.
val configuration = IrInterpreterConfiguration(printOnlyExceptionMessage = true, inlineNanVal = false)
ConstEvaluationLowering(context, configuration = configuration)
},
name = "ConstEvaluationLowering",
description = "Evaluate functions that are marked as `IntrinsicConstEvaluation`",
prerequisite = setOf(inlinePhase)