From 6d65d8d11dd7120975c35a14e737ffbc0dda7e2e Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 11 Aug 2020 13:52:57 -0700 Subject: [PATCH] Fixed issue with valueless ref params --- IDEHelper/Compiler/BfExprEvaluator.cpp | 5 +++++ IDEHelper/Compiler/BfModule.cpp | 1 + 2 files changed, 6 insertions(+) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 5783d221..cbd6a711 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3074,6 +3074,11 @@ BfTypedValue BfExprEvaluator::LoadLocal(BfLocalVariable* varDecl, bool allowRef) localResult = BfTypedValue(varDecl->mAddr, varDecl->mResolvedType, BfTypedValueKind_SplatHead); else if (!varDecl->mResolvedType->IsValuelessType()) localResult = BfTypedValue(varDecl->mValue, varDecl->mResolvedType, BfTypedValueKind_SplatHead); + else if ((varDecl->mResolvedType->IsRef()) && (!allowRef)) + { + BF_ASSERT(varDecl->mResolvedType->IsValuelessType()); + localResult = BfTypedValue(varDecl->mValue, varDecl->mResolvedType->GetUnderlyingType()); + } else localResult = BfTypedValue(varDecl->mValue, varDecl->mResolvedType); //BF_ASSERT(varDecl->mValue.IsArg()); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 10cf5256..0b223e4d 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -15887,6 +15887,7 @@ void BfModule::ProcessMethod_SetupParams(BfMethodInstance* methodInstance, BfTyp paramVar->mIsSplat = true; // Treat skipped (valueless) as a splat paramVar->mValue = mBfIRBuilder->GetFakeVal(); } + paramVar->mIsLowered = resolvedType->GetLoweredType(BfTypeUsage_Parameter, &loweredTypeCode, &loweredTypeCode2) != BfTypeCode_None; paramVar->mIsStruct = resolvedType->IsComposite() && !resolvedType->IsTypedPrimitive(); paramVar->mParamIdx = paramIdx;