diff options
Diffstat (limited to 'lib/Sema/SemaChecking.cpp')
-rw-r--r-- | lib/Sema/SemaChecking.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
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<FieldDecl>(D)) + return false; + return true; } void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, |