From: Benjamin Kramer Date: Sat, 6 Aug 2011 03:04:42 +0000 (+0000) Subject: Only look at decls after the current one when checking if it's the last field in... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=22d4fed17df02f5fa07165a69228b0b0f1a73a28;p=clang Only look at decls after the current one when checking if it's the last field in a record. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137009 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 8dfcfe7c11..d3332f7b56 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -3512,16 +3512,12 @@ static bool IsTailPaddedMemberArray(Sema &S, llvm::APInt Size, if (!RD || !RD->isStruct()) return false; - // This is annoyingly inefficient. We don't have a bi-directional iterator - // here so we can't walk backwards through the decls, we have to walk - // forward. - for (RecordDecl::field_iterator FI = RD->field_begin(), - FEnd = RD->field_end(); - FI != FEnd; ++FI) { - if (*FI == FD) - return ++FI == FEnd; - } - return false; + // See if this is the last field decl in the record. + const Decl *D = FD; + while ((D = D->getNextDeclInContext())) + if (isa(D)) + return false; + return true; } void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,