Reorganize this loop a bit so it doesn't crash for empty unions. Fixes
PR2419. llvm-svn: 52060
This commit is contained in:
parent
71fff8b4de
commit
fd1e32b1f3
|
|
@ -213,13 +213,15 @@ public:
|
|||
|
||||
// Find the field decl we're initializing, if any
|
||||
int FieldNo = 0; // Field no in RecordDecl
|
||||
FieldDecl* curField;
|
||||
do {
|
||||
FieldDecl* curField = 0;
|
||||
while (FieldNo < RD->getNumMembers()) {
|
||||
curField = RD->getMember(FieldNo);
|
||||
FieldNo++;
|
||||
} while (!curField->getIdentifier() && FieldNo < RD->getNumMembers());
|
||||
if (curField->getIdentifier())
|
||||
break;
|
||||
}
|
||||
|
||||
if (ILE->getNumInits() == 0 || !curField->getIdentifier())
|
||||
if (!curField || !curField->getIdentifier() || ILE->getNumInits() == 0)
|
||||
return llvm::Constant::getNullValue(Ty);
|
||||
|
||||
if (curField->isBitField()) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
// RUN: clang -emit-llvm < %s -o -
|
||||
|
||||
struct Mem {
|
||||
union {
|
||||
} u;
|
||||
};
|
||||
|
||||
struct Mem *columnMem(){
|
||||
static const struct Mem nullMem = { {} };
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue