r203236 - [C++11] Replacing iterators attr_begin() and attr_end() with iterator_range attrs(). Updating all of the usages of the iterators with range-based for loops.

Timur Iskhodzhanov timurrrr at google.com
Fri Mar 7 05:22:23 PST 2014


FYI, this broke my Windows ASan bot.
Unfortunately I'm on the go now so can't provide you with details.
You can talk to Reid if you need them.
07 марта 2014 г. 16:58 пользователь "Aaron Ballman" <aaron at aaronballman.com>
написал:

> Author: aaronballman
> Date: Fri Mar  7 06:50:00 2014
> New Revision: 203236
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203236&view=rev
> Log:
> [C++11] Replacing iterators attr_begin() and attr_end() with
> iterator_range attrs(). Updating all of the usages of the iterators with
> range-based for loops.
>
> Modified:
>     cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>     cfe/trunk/include/clang/AST/DeclBase.h
>     cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
>     cfe/trunk/lib/AST/ASTDumper.cpp
>     cfe/trunk/lib/AST/Decl.cpp
>     cfe/trunk/lib/AST/DeclBase.cpp
>     cfe/trunk/lib/Sema/SemaCodeComplete.cpp
>     cfe/trunk/lib/Sema/SemaDecl.cpp
>     cfe/trunk/lib/Sema/SemaDeclCXX.cpp
>     cfe/trunk/lib/Sema/SemaObjCProperty.cpp
>     cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
>     cfe/trunk/tools/libclang/CIndex.cpp
>     cfe/trunk/tools/libclang/IndexingContext.cpp
>
> Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original)
> +++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Fri Mar  7
> 06:50:00 2014
> @@ -598,8 +598,8 @@ bool DataRecursiveASTVisitor<Derived>::T
>    }
>
>    // Visit any attributes attached to this declaration.
> -  for (Decl::attr_iterator I=D->attr_begin(), E=D->attr_end(); I != E;
> ++I) {
> -    if (!getDerived().TraverseAttr(*I))
> +  for (auto I : D->attrs()) {
> +    if (!getDerived().TraverseAttr(I))
>        return false;
>    }
>    return true;
>
> Modified: cfe/trunk/include/clang/AST/DeclBase.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DeclBase.h (original)
> +++ cfe/trunk/include/clang/AST/DeclBase.h Fri Mar  7 06:50:00 2014
> @@ -18,6 +18,7 @@
>  #include "clang/AST/DeclarationName.h"
>  #include "clang/Basic/Linkage.h"
>  #include "clang/Basic/Specifiers.h"
> +#include "llvm/ADT/iterator_range.h"
>  #include "llvm/ADT/PointerUnion.h"
>  #include "llvm/ADT/iterator_range.h"
>  #include "llvm/Support/Compiler.h"
> @@ -447,14 +448,23 @@ public:
>    }
>
>    typedef AttrVec::const_iterator attr_iterator;
> +  typedef llvm::iterator_range<attr_iterator> attr_range;
> +
> +  attr_range attrs() const {
> +    // FIXME: Do not rely on iterators having comparable singular values.
> +    //        Note that this should error out if they do not.
> +    if (!hasAttrs())
> +      return attr_range();
> +
> +    auto const &A = getAttrs();
> +    return attr_range(A.begin(), A.end());
> +  }
>
> -  // FIXME: Do not rely on iterators having comparable singular values.
> -  //        Note that this should error out if they do not.
>    attr_iterator attr_begin() const {
> -    return hasAttrs() ? getAttrs().begin() : 0;
> +    return attrs().begin();
>    }
>    attr_iterator attr_end() const {
> -    return hasAttrs() ? getAttrs().end() : 0;
> +    return attrs().end();
>    }
>
>    template <typename T>
>
> Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
> +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Fri Mar  7 06:50:00
> 2014
> @@ -669,8 +669,8 @@ bool RecursiveASTVisitor<Derived>::Trave
>    }
>
>    // Visit any attributes attached to this declaration.
> -  for (Decl::attr_iterator I=D->attr_begin(), E=D->attr_end(); I != E;
> ++I) {
> -    if (!getDerived().TraverseAttr(*I))
> +  for (auto I : D->attrs()) {
> +    if (!getDerived().TraverseAttr(I))
>        return false;
>    }
>    return true;
>
> Modified: cfe/trunk/lib/AST/ASTDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTDumper.cpp (original)
> +++ cfe/trunk/lib/AST/ASTDumper.cpp Fri Mar  7 06:50:00 2014
> @@ -762,7 +762,7 @@ void ASTDumper::dumpDecl(const Decl *D)
>      if (ND->isHidden())
>        OS << " hidden";
>
> -  bool HasAttrs = D->attr_begin() != D->attr_end();
> +  bool HasAttrs = D->hasAttrs();
>    const FullComment *Comment =
>        D->getASTContext().getLocalCommentForDeclUncached(D);
>    // Decls within functions are visited by the body
>
> Modified: cfe/trunk/lib/AST/Decl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/Decl.cpp (original)
> +++ cfe/trunk/lib/AST/Decl.cpp Fri Mar  7 06:50:00 2014
> @@ -3501,8 +3501,8 @@ LabelDecl *LabelDecl::CreateDeserialized
>  void ValueDecl::anchor() { }
>
>  bool ValueDecl::isWeak() const {
> -  for (attr_iterator I = attr_begin(), E = attr_end(); I != E; ++I)
> -    if (isa<WeakAttr>(*I) || isa<WeakRefAttr>(*I))
> +  for (auto I : attrs())
> +    if (isa<WeakAttr>(I) || isa<WeakRefAttr>(I))
>        return true;
>
>    return isWeakImported();
>
> Modified: cfe/trunk/lib/AST/DeclBase.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/DeclBase.cpp (original)
> +++ cfe/trunk/lib/AST/DeclBase.cpp Fri Mar  7 06:50:00 2014
> @@ -408,8 +408,8 @@ AvailabilityResult Decl::getAvailability
>    AvailabilityResult Result = AR_Available;
>    std::string ResultMessage;
>
> -  for (attr_iterator A = attr_begin(), AEnd = attr_end(); A != AEnd; ++A)
> {
> -    if (DeprecatedAttr *Deprecated = dyn_cast<DeprecatedAttr>(*A)) {
> +  for (auto A : attrs()) {
> +    if (auto Deprecated = dyn_cast<DeprecatedAttr>(A)) {
>        if (Result >= AR_Deprecated)
>          continue;
>
> @@ -420,13 +420,13 @@ AvailabilityResult Decl::getAvailability
>        continue;
>      }
>
> -    if (UnavailableAttr *Unavailable = dyn_cast<UnavailableAttr>(*A)) {
> +    if (auto Unavailable = dyn_cast<UnavailableAttr>(A)) {
>        if (Message)
>          *Message = Unavailable->getMessage();
>        return AR_Unavailable;
>      }
>
> -    if (AvailabilityAttr *Availability = dyn_cast<AvailabilityAttr>(*A)) {
> +    if (auto Availability = dyn_cast<AvailabilityAttr>(A)) {
>        AvailabilityResult AR = CheckAvailability(getASTContext(),
> Availability,
>                                                  Message);
>
> @@ -482,11 +482,11 @@ bool Decl::isWeakImported() const {
>    if (!canBeWeakImported(IsDefinition))
>      return false;
>
> -  for (attr_iterator A = attr_begin(), AEnd = attr_end(); A != AEnd; ++A)
> {
> -    if (isa<WeakImportAttr>(*A))
> +  for (auto A : attrs()) {
> +    if (isa<WeakImportAttr>(A))
>        return true;
>
> -    if (AvailabilityAttr *Availability = dyn_cast<AvailabilityAttr>(*A)) {
> +    if (AvailabilityAttr *Availability = dyn_cast<AvailabilityAttr>(A)) {
>        if (CheckAvailability(getASTContext(), Availability, 0)
>                                                           ==
> AR_NotYetIntroduced)
>          return true;
>
> Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Fri Mar  7 06:50:00 2014
> @@ -2638,12 +2638,11 @@ CodeCompletionResult::CreateCodeCompleti
>      return Result.TakeString();
>    }
>
> -  for (Decl::attr_iterator i = ND->attr_begin(); i != ND->attr_end();
> ++i) {
> -    if (AnnotateAttr *Attr = dyn_cast_or_null<AnnotateAttr>(*i)) {
> -
>  Result.AddAnnotation(Result.getAllocator().CopyString(Attr->getAnnotation()));
> -    }
> -  }
> -
> +  for (auto i = ND->specific_attr_begin<AnnotateAttr>(),
> +            e = ND->specific_attr_end<AnnotateAttr>(); i != e; ++i)
> +    Result.AddAnnotation(
> +        Result.getAllocator().CopyString((*i)->getAnnotation()));
> +
>    AddResultTypeChunk(Ctx, Policy, ND, Result);
>
>    if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(ND)) {
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Mar  7 06:50:00 2014
> @@ -1791,16 +1791,16 @@ void Sema::MergeTypedefNameDecl(TypedefN
>  static bool DeclHasAttr(const Decl *D, const Attr *A) {
>    const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A);
>    const AnnotateAttr *Ann = dyn_cast<AnnotateAttr>(A);
> -  for (Decl::attr_iterator i = D->attr_begin(), e = D->attr_end(); i !=
> e; ++i)
> -    if ((*i)->getKind() == A->getKind()) {
> +  for (auto i : D->attrs())
> +    if (i->getKind() == A->getKind()) {
>        if (Ann) {
> -        if (Ann->getAnnotation() ==
> cast<AnnotateAttr>(*i)->getAnnotation())
> +        if (Ann->getAnnotation() ==
> cast<AnnotateAttr>(i)->getAnnotation())
>            return true;
>          continue;
>        }
>        // FIXME: Don't hardcode this check
> -      if (OA && isa<OwnershipAttr>(*i))
> -        return OA->getOwnKind() == cast<OwnershipAttr>(*i)->getOwnKind();
> +      if (OA && isa<OwnershipAttr>(i))
> +        return OA->getOwnKind() == cast<OwnershipAttr>(i)->getOwnKind();
>        return true;
>      }
>
> @@ -1997,12 +1997,9 @@ static const Decl *getDefinition(const D
>  }
>
>  static bool hasAttribute(const Decl *D, attr::Kind Kind) {
> -  for (Decl::attr_iterator I = D->attr_begin(), E = D->attr_end();
> -       I != E; ++I) {
> -    Attr *Attribute = *I;
> +  for (auto Attribute : D->attrs())
>      if (Attribute->getKind() == Kind)
>        return true;
> -  }
>    return false;
>  }
>
>
> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Fri Mar  7 06:50:00 2014
> @@ -12723,48 +12723,41 @@ bool Sema::checkThisInStaticMemberFuncti
>    FindCXXThisExpr Finder(*this);
>
>    // Check attributes.
> -  for (Decl::attr_iterator A = Method->attr_begin(), AEnd =
> Method->attr_end();
> -       A != AEnd; ++A) {
> +  for (auto A : Method->attrs()) {
>      // FIXME: This should be emitted by tblgen.
>      Expr *Arg = 0;
>      ArrayRef<Expr *> Args;
> -    if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
> +    if (auto G = dyn_cast<GuardedByAttr>(A))
>        Arg = G->getArg();
> -    else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
> +    else if (auto G = dyn_cast<PtGuardedByAttr>(A))
>        Arg = G->getArg();
> -    else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
> +    else if (auto AA = dyn_cast<AcquiredAfterAttr>(A))
>        Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
> -    else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
> +    else if (auto AB = dyn_cast<AcquiredBeforeAttr>(A))
>        Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
> -    else if (ExclusiveLockFunctionAttr *ELF
> -               = dyn_cast<ExclusiveLockFunctionAttr>(*A))
> +    else if (auto ELF  = dyn_cast<ExclusiveLockFunctionAttr>(A))
>        Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
> -    else if (SharedLockFunctionAttr *SLF
> -               = dyn_cast<SharedLockFunctionAttr>(*A))
> +    else if (auto SLF  = dyn_cast<SharedLockFunctionAttr>(A))
>        Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
> -    else if (ExclusiveTrylockFunctionAttr *ETLF
> -               = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
> +    else if (auto ETLF = dyn_cast<ExclusiveTrylockFunctionAttr>(A)) {
>        Arg = ETLF->getSuccessValue();
>        Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
> -    } else if (SharedTrylockFunctionAttr *STLF
> -                 = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
> +    } else if (auto STLF = dyn_cast<SharedTrylockFunctionAttr>(A)) {
>        Arg = STLF->getSuccessValue();
>        Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
> -    } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
> +    } else if (auto UF = dyn_cast<UnlockFunctionAttr>(A))
>        Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
> -    else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
> +    else if (auto LR = dyn_cast<LockReturnedAttr>(A))
>        Arg = LR->getArg();
> -    else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
> +    else if (auto LE = dyn_cast<LocksExcludedAttr>(A))
>        Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
> -    else if (RequiresCapabilityAttr *RC
> -               = dyn_cast<RequiresCapabilityAttr>(*A))
> +    else if (auto RC = dyn_cast<RequiresCapabilityAttr>(A))
>        Args = ArrayRef<Expr *>(RC->args_begin(), RC->args_size());
> -    else if (AcquireCapabilityAttr *AC =
> dyn_cast<AcquireCapabilityAttr>(*A))
> +    else if (auto AC = dyn_cast<AcquireCapabilityAttr>(A))
>        Args = ArrayRef<Expr *>(AC->args_begin(), AC->args_size());
> -    else if (TryAcquireCapabilityAttr *AC
> -             = dyn_cast<TryAcquireCapabilityAttr>(*A))
> -             Args = ArrayRef<Expr *>(AC->args_begin(), AC->args_size());
> -    else if (ReleaseCapabilityAttr *RC =
> dyn_cast<ReleaseCapabilityAttr>(*A))
> +    else if (auto AC = dyn_cast<TryAcquireCapabilityAttr>(A))
> +      Args = ArrayRef<Expr *>(AC->args_begin(), AC->args_size());
> +    else if (auto RC = dyn_cast<ReleaseCapabilityAttr>(A))
>        Args = ArrayRef<Expr *>(RC->args_begin(), RC->args_size());
>
>      if (Arg && !Finder.TraverseStmt(Arg))
>
> Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Fri Mar  7 06:50:00 2014
> @@ -1940,13 +1940,11 @@ void Sema::DiagnoseMissingDesignatedInit
>  static void AddPropertyAttrs(Sema &S, ObjCMethodDecl *PropertyMethod,
>                               ObjCPropertyDecl *Property) {
>    // Should we just clone all attributes over?
> -  for (Decl::attr_iterator A = Property->attr_begin(),
> -                        AEnd = Property->attr_end();
> -       A != AEnd; ++A) {
> -    if (isa<DeprecatedAttr>(*A) ||
> -        isa<UnavailableAttr>(*A) ||
> -        isa<AvailabilityAttr>(*A))
> -      PropertyMethod->addAttr((*A)->clone(S.Context));
> +  for (auto A : Property->attrs()) {
> +    if (isa<DeprecatedAttr>(A) ||
> +        isa<UnavailableAttr>(A) ||
> +        isa<AvailabilityAttr>(A))
> +      PropertyMethod->addAttr(A->clone(S.Context));
>    }
>  }
>
>
> Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Fri Mar  7 06:50:00
> 2014
> @@ -168,10 +168,7 @@ void Sema::InstantiateAttrs(const MultiL
>                              const Decl *Tmpl, Decl *New,
>                              LateInstantiatedAttrVec *LateAttrs,
>                              LocalInstantiationScope *OuterMostScope) {
> -  for (AttrVec::const_iterator i = Tmpl->attr_begin(), e =
> Tmpl->attr_end();
> -       i != e; ++i) {
> -    const Attr *TmplAttr = *i;
> -
> +  for (auto TmplAttr : Tmpl->attrs()) {
>      // FIXME: This should be generalized to more than just the
> AlignedAttr.
>      const AlignedAttr *Aligned = dyn_cast<AlignedAttr>(TmplAttr);
>      if (Aligned && Aligned->isAlignmentDependent()) {
>
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Fri Mar  7 06:50:00 2014
> @@ -1675,9 +1675,8 @@ bool CursorVisitor::VisitCXXRecordDecl(C
>  }
>
>  bool CursorVisitor::VisitAttributes(Decl *D) {
> -  for (AttrVec::const_iterator i = D->attr_begin(), e = D->attr_end();
> -       i != e; ++i)
> -    if (Visit(MakeCXCursor(*i, D, TU)))
> +  for (auto I : D->attrs())
> +    if (Visit(MakeCXCursor(I, D, TU)))
>          return true;
>
>    return false;
> @@ -6041,9 +6040,8 @@ static int getCursorPlatformAvailability
>                                                  int availability_size) {
>    bool HadAvailAttr = false;
>    int N = 0;
> -  for (Decl::attr_iterator A = D->attr_begin(), AEnd = D->attr_end(); A
> != AEnd;
> -       ++A) {
> -    if (DeprecatedAttr *Deprecated = dyn_cast<DeprecatedAttr>(*A)) {
> +  for (auto A : D->attrs()) {
> +    if (DeprecatedAttr *Deprecated = dyn_cast<DeprecatedAttr>(A)) {
>        HadAvailAttr = true;
>        if (always_deprecated)
>          *always_deprecated = 1;
> @@ -6052,7 +6050,7 @@ static int getCursorPlatformAvailability
>        continue;
>      }
>
> -    if (UnavailableAttr *Unavailable = dyn_cast<UnavailableAttr>(*A)) {
> +    if (UnavailableAttr *Unavailable = dyn_cast<UnavailableAttr>(A)) {
>        HadAvailAttr = true;
>        if (always_unavailable)
>          *always_unavailable = 1;
> @@ -6062,7 +6060,7 @@ static int getCursorPlatformAvailability
>        continue;
>      }
>
> -    if (AvailabilityAttr *Avail = dyn_cast<AvailabilityAttr>(*A)) {
> +    if (AvailabilityAttr *Avail = dyn_cast<AvailabilityAttr>(A)) {
>        HadAvailAttr = true;
>        if (N < availability_size) {
>          availability[N].Platform
>
> Modified: cfe/trunk/tools/libclang/IndexingContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/IndexingContext.cpp?rev=203236&r1=203235&r2=203236&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/libclang/IndexingContext.cpp (original)
> +++ cfe/trunk/tools/libclang/IndexingContext.cpp Fri Mar  7 06:50:00 2014
> @@ -67,9 +67,7 @@ AttrListInfo::AttrListInfo(const Decl *D
>    if (!D->hasAttrs())
>      return;
>
> -  for (AttrVec::const_iterator AttrI = D->attr_begin(), AttrE =
> D->attr_end();
> -         AttrI != AttrE; ++AttrI) {
> -    const Attr *A = *AttrI;
> +  for (auto A : D->attrs()) {
>      CXCursor C = MakeCXCursor(A, D, IdxCtx.CXTU);
>      CXIdxLoc Loc =  IdxCtx.getIndexLoc(A->getLocation());
>      switch (C.kind) {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140307/e979c5f4/attachment.html>


More information about the cfe-commits mailing list