From fd1e32b1f3f2acbd4a4feb6dc845a6da7b1b84a8 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Fri, 6 Jun 2008 20:12:37 +0000 Subject: Reorganize this loop a bit so it doesn't crash for empty unions. Fixes PR2419. llvm-svn: 52060 --- clang/lib/CodeGen/CGExprConstant.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'clang/lib/CodeGen/CGExprConstant.cpp') 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()) { -- cgit v1.2.3