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:
parent
d778187e34
commit
805d312c98
2 changed files with 14 additions and 2 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue