summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2008-06-06 20:12:37 +0000
committerEli Friedman <eli.friedman@gmail.com>2008-06-06 20:12:37 +0000
commitfd1e32b1f3f2acbd4a4feb6dc845a6da7b1b84a8 (patch)
tree90eebfda4ef4b7634a07ea219fb0df9d09b0ad03 /clang/lib/CodeGen
parent71fff8b4de621326b70278b16f7e9c8f434bece2 (diff)
downloadbcm5719-llvm-fd1e32b1f3f2acbd4a4feb6dc845a6da7b1b84a8.tar.gz
bcm5719-llvm-fd1e32b1f3f2acbd4a4feb6dc845a6da7b1b84a8.zip
Reorganize this loop a bit so it doesn't crash for empty unions. Fixes
PR2419. llvm-svn: 52060
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGExprConstant.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index 58b18848171..f5977728af8 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -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()) {
OpenPOWER on IntegriCloud