[K/N][codegen] Fixed wrong arguments evaluation order for IrSetField
#KT-56326 Fixed
This commit is contained in:
-2
@@ -1,5 +1,3 @@
|
|||||||
// KT-56326
|
|
||||||
// IGNORE_BACKEND_K2: NATIVE
|
|
||||||
import Host.x
|
import Host.x
|
||||||
|
|
||||||
object Host {
|
object Host {
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
// KT-56326
|
|
||||||
// IGNORE_BACKEND_K2: NATIVE
|
|
||||||
class CallbackBlock {}
|
class CallbackBlock {}
|
||||||
|
|
||||||
public class Foo
|
public class Foo
|
||||||
|
|||||||
+5
-4
@@ -1755,12 +1755,13 @@ internal class CodeGeneratorVisitor(
|
|||||||
return codegen.theUnitInstanceRef.llvm
|
return codegen.theUnitInstanceRef.llvm
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val thisPtr = value.receiver?.let { evaluateExpression(it) }
|
||||||
val valueToAssign = evaluateExpression(value.value)
|
val valueToAssign = evaluateExpression(value.value)
|
||||||
val address: LLVMValueRef
|
val address: LLVMValueRef
|
||||||
val alignment: Int
|
val alignment: Int
|
||||||
if (!value.symbol.owner.isStatic) {
|
if (thisPtr != null) {
|
||||||
val thisPtr = evaluateExpression(value.receiver!!)
|
require(!value.symbol.owner.isStatic) { "Unexpected receiver for a static field: ${value.render()}" }
|
||||||
assert(thisPtr.type == codegen.kObjHeaderPtr) {
|
require(thisPtr.type == codegen.kObjHeaderPtr) {
|
||||||
LLVMPrintTypeToString(thisPtr.type)?.toKString().toString()
|
LLVMPrintTypeToString(thisPtr.type)?.toKString().toString()
|
||||||
}
|
}
|
||||||
val parentAsClass = value.symbol.owner.parentAsClass
|
val parentAsClass = value.symbol.owner.parentAsClass
|
||||||
@@ -1775,7 +1776,7 @@ internal class CodeGeneratorVisitor(
|
|||||||
address = fieldPtrOfClass(thisPtr, value.symbol.owner)
|
address = fieldPtrOfClass(thisPtr, value.symbol.owner)
|
||||||
alignment = generationState.llvmDeclarations.forField(value.symbol.owner).alignment
|
alignment = generationState.llvmDeclarations.forField(value.symbol.owner).alignment
|
||||||
} else {
|
} 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)
|
if (context.config.threadsAreAllowed && value.symbol.owner.storageKind(context) == FieldStorageKind.GLOBAL)
|
||||||
functionGenerationContext.checkGlobalsAccessible(currentCodeContext.exceptionHandler)
|
functionGenerationContext.checkGlobalsAccessible(currentCodeContext.exceptionHandler)
|
||||||
if (value.symbol.owner.shouldBeFrozen(context) && value.origin != ObjectClassLowering.IrStatementOriginFieldPreInit)
|
if (value.symbol.owner.shouldBeFrozen(context) && value.origin != ObjectClassLowering.IrStatementOriginFieldPreInit)
|
||||||
|
|||||||
Reference in New Issue
Block a user