forked from OSchip/llvm-project
Fix crash during initialization of a bitfield which followed a zero
length element. Fix some 80-col violations. llvm-svn: 54610
This commit is contained in:
parent
63fed4f35e
commit
07bb087ac1
clang
|
@ -132,7 +132,8 @@ public:
|
||||||
|
|
||||||
// Calculate information about the relevant field
|
// Calculate information about the relevant field
|
||||||
const llvm::Type* Ty = CI->getType();
|
const llvm::Type* Ty = CI->getType();
|
||||||
unsigned size = CGM.getTypes().getTargetData().getTypeStoreSizeInBits(Ty);
|
const llvm::TargetData &TD = CGM.getTypes().getTargetData();
|
||||||
|
unsigned size = TD.getTypeStoreSizeInBits(Ty);
|
||||||
unsigned fieldOffset = CGM.getTypes().getLLVMFieldNo(Field) * size;
|
unsigned fieldOffset = CGM.getTypes().getLLVMFieldNo(Field) * size;
|
||||||
CodeGenTypes::BitFieldInfo bitFieldInfo =
|
CodeGenTypes::BitFieldInfo bitFieldInfo =
|
||||||
CGM.getTypes().getBitFieldInfo(Field);
|
CGM.getTypes().getBitFieldInfo(Field);
|
||||||
|
@ -143,7 +144,12 @@ public:
|
||||||
// FIXME: This won't work if the struct isn't completely packed!
|
// FIXME: This won't work if the struct isn't completely packed!
|
||||||
unsigned offset = 0, i = 0;
|
unsigned offset = 0, i = 0;
|
||||||
while (offset < (fieldOffset & -8))
|
while (offset < (fieldOffset & -8))
|
||||||
offset += CGM.getTypes().getTargetData().getTypeStoreSizeInBits(Elts[i++]->getType());
|
offset += TD.getTypeStoreSizeInBits(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)
|
||||||
|
++i;
|
||||||
|
|
||||||
// Promote the size of V if necessary
|
// Promote the size of V if necessary
|
||||||
// FIXME: This should never occur, but currently it can because
|
// FIXME: This should never occur, but currently it can because
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: clang --emit-llvm -o %t %s &&
|
||||||
|
// RUN: grep "i8 52" %s | count 1
|
||||||
|
|
||||||
|
struct et7 {
|
||||||
|
float lv7[0];
|
||||||
|
char mv7:6;
|
||||||
|
} yv7 = {
|
||||||
|
{},
|
||||||
|
52,
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue