diff --git a/include/llvm/Target/TargetData.h b/include/llvm/Target/TargetData.h index 516aae700d8..18f9d3b86d8 100644 --- a/include/llvm/Target/TargetData.h +++ b/include/llvm/Target/TargetData.h @@ -276,10 +276,18 @@ public: /// class StructLayout { std::vector MemberOffsets; -public: unsigned StructAlignment; uint64_t StructSize; +public: + uint64_t getSizeInBytes() const { + return StructSize; + } + + unsigned getAlignment() const { + return StructAlignment; + } + /// getElementContainingOffset - Given a valid offset into the structure, /// return the structure index that contains it. /// diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp index 6dac1ea3759..2d7dec40f75 100644 --- a/lib/CodeGen/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter.cpp @@ -738,7 +738,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) { // Check if padding is needed and insert one or more 0s. uint64_t fieldSize = TD->getTypeSize(field->getType()); - uint64_t padSize = ((i == e-1? cvsLayout->StructSize + uint64_t padSize = ((i == e-1? cvsLayout->getSizeInBytes() : cvsLayout->getElementOffset(i+1)) - cvsLayout->getElementOffset(i)) - fieldSize; sizeSoFar += fieldSize + padSize; @@ -749,7 +749,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) { // Insert the field padding unless it's zero bytes... EmitZeros(padSize); } - assert(sizeSoFar == cvsLayout->StructSize && + assert(sizeSoFar == cvsLayout->getSizeInBytes() && "Layout of constant struct may be incorrect!"); return; } else if (const ConstantFP *CFP = dyn_cast(CV)) { diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp index 1ebe5b5711e..adbd22a5269 100644 --- a/lib/Target/TargetData.cpp +++ b/lib/Target/TargetData.cpp @@ -325,7 +325,7 @@ static inline void getTypeInfoABI(const Type *Ty, const TargetData *TD, case Type::StructTyID: { // Get the layout annotation... which is lazily created on demand. const StructLayout *Layout = TD->getStructLayout(cast(Ty)); - Size = Layout->StructSize; Alignment = Layout->StructAlignment; + Size = Layout->getSizeInBytes(); Alignment = Layout->getAlignment(); return; } @@ -387,9 +387,9 @@ static inline void getTypeInfoPref(const Type *Ty, const TargetData *TD, // Get the layout annotation... which is lazily created on demand; // enforce minimum aggregate alignment. const StructLayout *Layout = TD->getStructLayout(cast(Ty)); - Size = Layout->StructSize; - Alignment = std::max(Layout->StructAlignment, - (const unsigned int) TD->getAggMinPrefAlignment()); + Size = Layout->getSizeInBytes(); + Alignment = std::max(Layout->getAlignment(), + (const unsigned int)TD->getAggMinPrefAlignment()); return; }