1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +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);
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>();
extractValueInst->mAggVal = val;

View file

@ -1585,11 +1585,15 @@ BfLocalVariable* BfModule::HandleVariableDeclaration(BfVariableDeclaration* varD
{
if (initValue.mType->IsNullable())
{
auto nullableElementType = initValue.mType->GetUnderlyingType();
auto boolType = GetPrimitiveType(BfTypeCode_Boolean);
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;
initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType());
if (!nullableElementType->IsValuelessType())
initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType());
else
initValue = BfTypedValue(mBfIRBuilder->GetFakeVal(), nullableElementType);
}
else
{