From f88e7523039aad79092e86eaf0ccbae5dead013a Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 12 Aug 2024 18:23:49 -0400 Subject: [PATCH] Fix for unions where union val is non-addr and member is a reference --- IDEHelper/Compiler/BfExprEvaluator.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index f9ff3bd0..555ea424 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -5406,11 +5406,14 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe { auto unionInnerType = typeInstance->GetUnionInnerType(); if (unionInnerType != resolvedFieldType) - { - if (!retVal.IsAddr()) - retVal = mModule->MakeAddressable(retVal); + { + BfTypedValue unionTypedValue = retVal; + unionTypedValue.mType = unionInnerType; + if (!unionTypedValue.IsAddr()) + unionTypedValue = mModule->MakeAddressable(unionTypedValue); BfIRType llvmPtrType = mModule->mBfIRBuilder->GetPointerTo(mModule->mBfIRBuilder->MapType(resolvedFieldType)); - retVal.mValue = mModule->mBfIRBuilder->CreateBitCast(retVal.mValue, llvmPtrType); + retVal.mValue = mModule->mBfIRBuilder->CreateBitCast(unionTypedValue.mValue, llvmPtrType); + retVal.mKind = unionTypedValue.mKind; } }