From d1d3af1cc07e6056a5d8e3004e6cf35fd5084711 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 24 Feb 2021 15:41:39 -0800 Subject: [PATCH] Fixed payload enum alignment calculation --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index c9983c3d..473b90dd 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -4605,13 +4605,19 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy if ((typeInstance->IsPayloadEnum()) && (!typeInstance->IsBoxed())) { + typeInstance->mAlign = unionInnerType->mAlign; + int lastTagId = -1; for (auto& fieldInstanceRef : typeInstance->mFieldInstances) { auto fieldInstance = &fieldInstanceRef; auto fieldDef = fieldInstance->GetFieldDef(); if ((fieldDef != NULL) && (fieldInstance->mDataIdx < 0)) + { + BF_ASSERT(fieldInstance->mResolvedType->mAlign >= 1); + typeInstance->mAlign = BF_MAX(typeInstance->mAlign, fieldInstance->mResolvedType->mAlign); lastTagId = -fieldInstance->mDataIdx - 1; + } } auto fieldInstance = &typeInstance->mFieldInstances.back(); @@ -4638,7 +4644,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy } } - typeInstance->mAlign = BF_MAX(unionInnerType->mAlign, discriminatorType->mAlign); + typeInstance->mAlign = BF_MAX(typeInstance->mAlign, discriminatorType->mAlign); typeInstance->mSize = fieldInstance->mDataOffset + discriminatorType->mSize; typeInstance->mInstSize = typeInstance->mSize;