1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Fixed conditional var initializer with valueless nullable

This commit is contained in:
Brian Fiete 2025-03-07 12:37:40 -08:00
parent d778187e34
commit 805d312c98
2 changed files with 14 additions and 2 deletions

View file

@ -1740,6 +1740,14 @@ void BeIRCodeGen::HandleNextCmd()
CMD_PARAM(int, idx); CMD_PARAM(int, idx);
BF_ASSERT(val->GetType()->IsComposite()); BF_ASSERT(val->GetType()->IsComposite());
if (val->GetType()->mTypeCode == BeTypeCode_Struct)
{
auto structType = (BeStructType*)val->GetType();
if (idx >= structType->mMembers.mSize)
{
FatalError("ExtractValue OOB");
}
}
auto extractValueInst = mBeModule->AllocInst<BeExtractValueInst>(); auto extractValueInst = mBeModule->AllocInst<BeExtractValueInst>();
extractValueInst->mAggVal = val; extractValueInst->mAggVal = val;

View file

@ -1585,11 +1585,15 @@ BfLocalVariable* BfModule::HandleVariableDeclaration(BfVariableDeclaration* varD
{ {
if (initValue.mType->IsNullable()) if (initValue.mType->IsNullable())
{ {
auto nullableElementType = initValue.mType->GetUnderlyingType();
auto boolType = GetPrimitiveType(BfTypeCode_Boolean); auto boolType = GetPrimitiveType(BfTypeCode_Boolean);
initValue = LoadValue(initValue); initValue = LoadValue(initValue);
exprEvaluator->mResult = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 2), boolType); exprEvaluator->mResult = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, nullableElementType->IsValuelessType() ? 1 : 2), boolType);
handledExprBoolResult = true; handledExprBoolResult = true;
if (!nullableElementType->IsValuelessType())
initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType()); initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType());
else
initValue = BfTypedValue(mBfIRBuilder->GetFakeVal(), nullableElementType);
} }
else else
{ {