[K/N][codegen] Fixed wrong arguments evaluation order for IrSetField

#KT-56326 Fixed
This commit is contained in:
Igor Chevdar
2023-02-07 14:15:52 +02:00
committed by Space Team
parent 2bafa0eb77
commit 12d0b1e846
3 changed files with 5 additions and 8 deletions
@@ -1,5 +1,3 @@
// KT-56326
// IGNORE_BACKEND_K2: NATIVE
import Host.x
object Host {
-2
View File
@@ -1,5 +1,3 @@
// KT-56326
// IGNORE_BACKEND_K2: NATIVE
class CallbackBlock {}
public class Foo
@@ -1755,12 +1755,13 @@ internal class CodeGeneratorVisitor(
return codegen.theUnitInstanceRef.llvm
}
val thisPtr = value.receiver?.let { evaluateExpression(it) }
val valueToAssign = evaluateExpression(value.value)
val address: LLVMValueRef
val alignment: Int
if (!value.symbol.owner.isStatic) {
val thisPtr = evaluateExpression(value.receiver!!)
assert(thisPtr.type == codegen.kObjHeaderPtr) {
if (thisPtr != null) {
require(!value.symbol.owner.isStatic) { "Unexpected receiver for a static field: ${value.render()}" }
require(thisPtr.type == codegen.kObjHeaderPtr) {
LLVMPrintTypeToString(thisPtr.type)?.toKString().toString()
}
val parentAsClass = value.symbol.owner.parentAsClass
@@ -1775,7 +1776,7 @@ internal class CodeGeneratorVisitor(
address = fieldPtrOfClass(thisPtr, value.symbol.owner)
alignment = generationState.llvmDeclarations.forField(value.symbol.owner).alignment
} else {
assert(value.receiver == null)
require(value.symbol.owner.isStatic) { "A receiver expected for a non-static field: ${value.render()}" }
if (context.config.threadsAreAllowed && value.symbol.owner.storageKind(context) == FieldStorageKind.GLOBAL)
functionGenerationContext.checkGlobalsAccessible(currentCodeContext.exceptionHandler)
if (value.symbol.owner.shouldBeFrozen(context) && value.origin != ObjectClassLowering.IrStatementOriginFieldPreInit)