Reorganize this loop a bit so it doesn't crash for empty unions. Fixes

PR2419.

llvm-svn: 52060
This commit is contained in:
Eli Friedman 2008-06-06 20:12:37 +00:00
parent 71fff8b4de
commit fd1e32b1f3
2 changed files with 18 additions and 4 deletions

View File

@ -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()) {

View File

@ -0,0 +1,12 @@
// RUN: clang -emit-llvm < %s -o -
struct Mem {
union {
} u;
};
struct Mem *columnMem(){
static const struct Mem nullMem = { {} };
}