summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2009-02-01 08:12:19 +0000
committerEli Friedman <eli.friedman@gmail.com>2009-02-01 08:12:19 +0000
commit1f90fe17f91f22ed6df24da747a632f9a7a925bd (patch)
tree03f940dd7d08ba7e0d8388904bd64fb6d3079ebc /clang/lib/CodeGen/CGExprConstant.cpp
parent66838e9a2707d822ce2eaa1211c5e85118e47860 (diff)
downloadbcm5719-llvm-1f90fe17f91f22ed6df24da747a632f9a7a925bd.tar.gz
bcm5719-llvm-1f90fe17f91f22ed6df24da747a632f9a7a925bd.zip
Fix for PR3447: use padded sizes for computations on struct/union
constants. llvm-svn: 63491
Diffstat (limited to 'clang/lib/CodeGen/CGExprConstant.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprConstant.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index 604090e2b35..838452d476c 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -124,7 +124,7 @@ public:
// Calculate information about the relevant field
const llvm::Type* Ty = CI->getType();
const llvm::TargetData &TD = CGM.getTypes().getTargetData();
- unsigned size = TD.getTypeStoreSizeInBits(Ty);
+ unsigned size = TD.getTypePaddedSizeInBits(Ty);
unsigned fieldOffset = CGM.getTypes().getLLVMFieldNo(Field) * size;
CodeGenTypes::BitFieldInfo bitFieldInfo =
CGM.getTypes().getBitFieldInfo(Field);
@@ -135,11 +135,11 @@ public:
// FIXME: This won't work if the struct isn't completely packed!
unsigned offset = 0, i = 0;
while (offset < (fieldOffset & -8))
- offset += TD.getTypeStoreSizeInBits(Elts[i++]->getType());
+ offset += TD.getTypePaddedSizeInBits(Elts[i++]->getType());
// Advance over 0 sized elements (must terminate in bounds since
// the bitfield must have a size).
- while (TD.getTypeStoreSizeInBits(Elts[i]->getType()) == 0)
+ while (TD.getTypePaddedSizeInBits(Elts[i]->getType()) == 0)
++i;
// Promote the size of V if necessary
@@ -223,8 +223,8 @@ public:
std::vector<const llvm::Type*> Types;
Elts.push_back(C);
Types.push_back(C->getType());
- unsigned CurSize = CGM.getTargetData().getTypeStoreSize(C->getType());
- unsigned TotalSize = CGM.getTargetData().getTypeStoreSize(Ty);
+ unsigned CurSize = CGM.getTargetData().getTypePaddedSize(C->getType());
+ unsigned TotalSize = CGM.getTargetData().getTypePaddedSize(Ty);
while (CurSize < TotalSize) {
Elts.push_back(llvm::Constant::getNullValue(llvm::Type::Int8Ty));
Types.push_back(llvm::Type::Int8Ty);
OpenPOWER on IntegriCloud