mirror of
https://github.com/beefytech/Beef.git
synced 2025-07-04 15:26:00 +02:00
Fixed crash related to global var alignment
This commit is contained in:
parent
2c6a72ba68
commit
aaccaa97e2
5 changed files with 40 additions and 10 deletions
|
@ -1658,6 +1658,9 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
{
|
||||
CMD_PARAM(BeValue*, val);
|
||||
CMD_PARAM(bool, unnamedAddr);
|
||||
|
||||
BF_ASSERT(BeValueDynCast<BeGlobalVariable>(val) != NULL);
|
||||
|
||||
((BeGlobalVariable*)val)->mUnnamedAddr = true;
|
||||
}
|
||||
break;
|
||||
|
@ -1665,6 +1668,8 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
{
|
||||
CMD_PARAM(BeValue*, val);
|
||||
CMD_PARAM(BeConstant*, initializer);
|
||||
|
||||
BF_ASSERT(BeValueDynCast<BeGlobalVariable>(val) != NULL);
|
||||
|
||||
auto globalVariable = (BeGlobalVariable*)val;
|
||||
globalVariable->mInitializer = initializer;
|
||||
|
@ -1681,6 +1686,8 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
CMD_PARAM(BeValue*, val);
|
||||
CMD_PARAM(int, alignment);
|
||||
|
||||
BF_ASSERT(BeValueDynCast<BeGlobalVariable>(val) != NULL);
|
||||
|
||||
auto globalVariable = (BeGlobalVariable*)val;
|
||||
globalVariable->mAlign = alignment;
|
||||
BF_ASSERT(alignment > 0);
|
||||
|
|
|
@ -4461,7 +4461,7 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
|
|||
auto pointerTypeData = mBfIRBuilder->CreateConstStruct(mBfIRBuilder->MapTypeInst(reflectPointerType, BfIRPopulateType_Full), pointerTypeDataParms);
|
||||
typeDataVar = mBfIRBuilder->CreateGlobalVariable(mBfIRBuilder->MapTypeInst(reflectPointerType), true,
|
||||
BfIRLinkageType_External, pointerTypeData, typeDataName);
|
||||
|
||||
mBfIRBuilder->GlobalVar_SetAlignment(typeDataVar, mSystem->mPtrSize);
|
||||
typeDataVar = mBfIRBuilder->CreateBitCast(typeDataVar, mBfIRBuilder->MapType(mContext->mBfTypeType));
|
||||
}
|
||||
else if (type->IsSizedArray())
|
||||
|
@ -4478,18 +4478,19 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
|
|||
auto sizedArrayTypeData = mBfIRBuilder->CreateConstStruct(mBfIRBuilder->MapTypeInst(reflectSizedArrayType, BfIRPopulateType_Full), sizedArrayTypeDataParms);
|
||||
typeDataVar = mBfIRBuilder->CreateGlobalVariable(mBfIRBuilder->MapTypeInst(reflectSizedArrayType), true,
|
||||
BfIRLinkageType_External, sizedArrayTypeData, typeDataName);
|
||||
mBfIRBuilder->GlobalVar_SetAlignment(typeDataVar, mSystem->mPtrSize);
|
||||
typeDataVar = mBfIRBuilder->CreateBitCast(typeDataVar, mBfIRBuilder->MapType(mContext->mBfTypeType));
|
||||
}
|
||||
else
|
||||
{
|
||||
typeDataVar = mBfIRBuilder->CreateGlobalVariable(mBfIRBuilder->MapTypeInst(mContext->mBfTypeType), true,
|
||||
BfIRLinkageType_External, typeData, typeDataName);
|
||||
mBfIRBuilder->GlobalVar_SetAlignment(typeDataVar, mSystem->mPtrSize);
|
||||
}
|
||||
}
|
||||
else
|
||||
typeDataVar = mBfIRBuilder->CreateConstNull(mBfIRBuilder->MapType(mContext->mBfTypeType));
|
||||
|
||||
mBfIRBuilder->GlobalVar_SetAlignment(typeDataVar, mSystem->mPtrSize);
|
||||
|
||||
mTypeDataRefs[typeInstance] = typeDataVar;
|
||||
|
||||
return typeDataVar;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue