diff --git a/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.cpp b/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.cpp index 958cf855..935c19d9 100644 --- a/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.cpp +++ b/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.cpp @@ -241,3 +241,13 @@ const IEvaluation* DeclarationModifierComputations::GetDynamicArraySizeEvaluatio return dynamic_cast(declarationModifier)->m_dynamic_size_evaluation.get(); } + +int DeclarationModifierComputations::GetAlignment() const +{ + const auto following = GetFollowingDeclarationModifiers(); + + return std::any_of(following.begin(), following.end(), [](const DeclarationModifier* modifier) + { + return modifier->GetType() == DeclarationModifierType::POINTER; + }) ? m_information->m_member->GetAlignment() : m_information->m_member->m_type_declaration->m_type->GetAlignment(); +} diff --git a/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.h b/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.h index 7714f5e9..93fc3685 100644 --- a/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.h +++ b/src/ZoneCodeGeneratorLib/Domain/Computations/MemberDeclarationModifierComputations.h @@ -31,4 +31,5 @@ public: _NODISCARD const IEvaluation* GetPointerArrayCountEvaluation() const; _NODISCARD bool IsDynamicArray() const; _NODISCARD const IEvaluation* GetDynamicArraySizeEvaluation() const; + _NODISCARD int GetAlignment() const; }; diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp index 018e3e47..88c5e355 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp @@ -898,8 +898,8 @@ class ZoneLoadTemplate::Internal final : BaseTemplate const auto typeDecl = MakeTypeDecl(member->m_member->m_type_declaration.get()); const auto followingReferences = MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers()); LINE(MakeMemberAccess(info, member, modifier)<<" = m_stream->Alloc<"<(alignof("<m_member->m_type_declaration->GetAlignment()) - + <<")); // " << modifier.GetAlignment()) + if (computations.IsInTempBlock()) { LINE("")