diff options
Diffstat (limited to 'clang/lib/AST')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 12 | ||||
| -rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 10 | 
2 files changed, 2 insertions, 20 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 12981e26c24..e2fa4e504a2 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -4250,17 +4250,7 @@ static void EncodeBitField(const ASTContext *Ctx, std::string& S,    if (!Ctx->getLangOptions().NeXTRuntime) {      const RecordDecl *RD = FD->getParent();      const ASTRecordLayout &RL = Ctx->getASTRecordLayout(RD); -    // FIXME: This same linear search is also used in ExprConstant - it might -    // be better if the FieldDecl stored its offset.  We'd be increasing the -    // size of the object slightly, but saving some time every time it is used. -    unsigned i = 0; -    for (RecordDecl::field_iterator Field = RD->field_begin(), -                                 FieldEnd = RD->field_end(); -         Field != FieldEnd; (void)++Field, ++i) { -      if (*Field == FD) -        break; -    } -    S += llvm::utostr(RL.getFieldOffset(i)); +    S += llvm::utostr(RL.getFieldOffset(FD->getFieldIndex()));      if (T->isEnumeralType())        S += 'i';      else diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index df33f7afc3f..cc8c50198cb 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -536,15 +536,7 @@ bool LValueExprEvaluator::VisitMemberExpr(const MemberExpr *E) {    if (FD->getType()->isReferenceType())      return false; -  // FIXME: This is linear time. -  unsigned i = 0; -  for (RecordDecl::field_iterator Field = RD->field_begin(), -                               FieldEnd = RD->field_end(); -       Field != FieldEnd; (void)++Field, ++i) { -    if (*Field == FD) -      break; -  } - +  unsigned i = FD->getFieldIndex();    Result.Offset += Info.Ctx.toCharUnitsFromBits(RL.getFieldOffset(i));    return true;  }  | 

