1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-07-04 23:36:00 +02:00

Fix unions with base types

This commit is contained in:
Brian Fiete 2022-08-24 16:54:22 -07:00
parent e6cbf0509b
commit f9d5b58102
3 changed files with 17 additions and 4 deletions

View file

@ -3179,7 +3179,7 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
auto resolvedFieldDIType = DbgGetType(fieldType);
String fieldName = "$bfunion";
auto memberType = DbgCreateMemberType(diForwardDecl, fieldName, fileDIScope, lineNum,
fieldType->mSize * 8, fieldType->mAlign * 8, 0,
fieldType->mSize * 8, fieldType->mAlign * 8, typeInstance->mBaseType->mInstSize * 8,
flags, resolvedFieldDIType);
diFieldTypes.push_back(memberType);
}

View file

@ -5433,8 +5433,8 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
{
BF_ASSERT(resolvedFieldType->mSize >= 0);
if (alignSize > 1)
dataPos = (dataPos + (alignSize - 1)) & ~(alignSize - 1);
// if (alignSize > 1)
// dataPos = (dataPos + (alignSize - 1)) & ~(alignSize - 1);
fieldInstance->mDataOffset = dataPos;
typeInstance->mInstAlign = std::max(typeInstance->mInstAlign, alignSize);
@ -5623,7 +5623,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
if (unionInnerType != NULL)
{
dataPos = unionInnerType->mSize;
dataPos = startDataPos + unionInnerType->mSize;
typeInstance->mInstAlign = BF_MAX(unionInnerType->mAlign, typeInstance->mInstAlign);
}