<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Mar 7, 2014 at 1:31 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><p dir="ltr"><br>
On 7 Mar 2014 10:21, "Aaron Ballman" <<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>> wrote:<br>
><br>
> Author: aaronballman<br>
> Date: Fri Mar  7 12:11:58 2014<br>
> New Revision: 203261<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=203261&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=203261&view=rev</a><br>
> Log:<br>
> [C++11] Replacing IndirectFieldDecl iterators chain_begin() and chain_end() with iterator_range chains(). Updating all of the usages of the iterators with range-based for loops.</p>
</div><p dir="ltr">This one should be "chain", not "chains".</p></blockquote><div><br></div><div>What is the official convention here? There was a recent thread about this but I didn't see any conclusion. Are you going for foo_begin/foo_end/foo? I actually like that better than my foo_range suggestion.</div>
<div><br></div><div>-- Sean Silva</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
<p dir="ltr">> Modified:<br>
>     cfe/trunk/include/clang/AST/Decl.h<br>
>     cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h<br>
>     cfe/trunk/lib/AST/ASTImporter.cpp<br>
>     cfe/trunk/lib/AST/ExprConstant.cpp<br>
>     cfe/trunk/lib/AST/RecordLayoutBuilder.cpp<br>
>     cfe/trunk/lib/CodeGen/CGClass.cpp<br>
>     cfe/trunk/lib/Sema/SemaDecl.cpp<br>
>     cfe/trunk/lib/Sema/SemaDeclCXX.cpp<br>
>     cfe/trunk/lib/Sema/SemaExpr.cpp<br>
>     cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
>     cfe/trunk/lib/Serialization/ASTWriterDecl.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/AST/Decl.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/include/clang/AST/Decl.h (original)<br>
> +++ cfe/trunk/include/clang/AST/Decl.h Fri Mar  7 12:11:58 2014<br>
> @@ -2331,8 +2331,13 @@ public:<br>
>    static IndirectFieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);<br>
><br>
>    typedef NamedDecl * const *chain_iterator;<br>
> -  chain_iterator chain_begin() const { return Chaining; }<br>
> -  chain_iterator chain_end() const  { return Chaining+ChainingSize; }<br>
> +  typedef llvm::iterator_range<chain_iterator> chain_range;<br>
> +<br>
> +  chain_range chains() const {<br>
> +    return chain_range(Chaining, Chaining + ChainingSize);<br>
> +  }<br>
> +  chain_iterator chain_begin() const { return chains().begin(); }<br>
> +  chain_iterator chain_end() const  { return chains().end(); }<br>
><br>
>    unsigned getChainingSize() const { return ChainingSize; }<br>
><br>
><br>
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h (original)<br>
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h Fri Mar  7 12:11:58 2014<br>
> @@ -676,10 +676,8 @@ inline SVal ProgramState::getLValue(cons<br>
>  inline SVal ProgramState::getLValue(const IndirectFieldDecl *D,<br>
>                                      SVal Base) const {<br>
>    StoreManager &SM = *getStateManager().StoreMgr;<br>
> -  for (IndirectFieldDecl::chain_iterator I = D->chain_begin(),<br>
> -                                         E = D->chain_end();<br>
> -       I != E; ++I) {<br>
> -    Base = SM.getLValueField(cast<FieldDecl>(*I), Base);<br>
> +  for (const auto *I : D->chains()) {<br>
> +    Base = SM.getLValueField(cast<FieldDecl>(I), Base);<br>
>    }<br>
><br>
>    return Base;<br>
><br>
> Modified: cfe/trunk/lib/AST/ASTImporter.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/AST/ASTImporter.cpp (original)<br>
> +++ cfe/trunk/lib/AST/ASTImporter.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -2967,9 +2967,8 @@ Decl *ASTNodeImporter::VisitIndirectFiel<br>
>      new (Importer.getToContext())NamedDecl*[D->getChainingSize()];<br>
><br>
>    unsigned i = 0;<br>
> -  for (IndirectFieldDecl::chain_iterator PI = D->chain_begin(),<br>
> -       PE = D->chain_end(); PI != PE; ++PI) {<br>
> -    Decl* D = Importer.Import(*PI);<br>
> +  for (auto *PI : D->chains()) {<br>
> +    Decl *D = Importer.Import(PI);<br>
>      if (!D)<br>
>        return 0;<br>
>      NamedChain[i++] = cast<NamedDecl>(D);<br>
><br>
> Modified: cfe/trunk/lib/AST/ExprConstant.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/AST/ExprConstant.cpp (original)<br>
> +++ cfe/trunk/lib/AST/ExprConstant.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -1832,9 +1832,8 @@ static bool HandleLValueMember(EvalInfo<br>
>  static bool HandleLValueIndirectMember(EvalInfo &Info, const Expr *E,<br>
>                                         LValue &LVal,<br>
>                                         const IndirectFieldDecl *IFD) {<br>
> -  for (IndirectFieldDecl::chain_iterator C = IFD->chain_begin(),<br>
> -                                         CE = IFD->chain_end(); C != CE; ++C)<br>
> -    if (!HandleLValueMember(Info, E, LVal, cast<FieldDecl>(*C)))<br>
> +  for (const auto *C : IFD->chains())<br>
> +    if (!HandleLValueMember(Info, E, LVal, cast<FieldDecl>(C)))<br>
>        return false;<br>
>    return true;<br>
>  }<br>
> @@ -3721,10 +3720,8 @@ static bool HandleConstructorCall(Source<br>
>      } else if (IndirectFieldDecl *IFD = (*I)->getIndirectMember()) {<br>
>        // Walk the indirect field decl's chain to find the object to initialize,<br>
>        // and make sure we've initialized every step along it.<br>
> -      for (IndirectFieldDecl::chain_iterator C = IFD->chain_begin(),<br>
> -                                             CE = IFD->chain_end();<br>
> -           C != CE; ++C) {<br>
> -        FD = cast<FieldDecl>(*C);<br>
> +      for (auto *C : IFD->chains()) {<br>
> +        FD = cast<FieldDecl>(C);<br>
>          CXXRecordDecl *CD = cast<CXXRecordDecl>(FD->getParent());<br>
>          // Switch the union field if it differs. This happens if we had<br>
>          // preceding zero-initialization, and we're now initializing a union<br>
><br>
> Modified: cfe/trunk/lib/AST/RecordLayoutBuilder.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/AST/RecordLayoutBuilder.cpp (original)<br>
> +++ cfe/trunk/lib/AST/RecordLayoutBuilder.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -3002,10 +3002,8 @@ uint64_t ASTContext::getFieldOffset(cons<br>
>      const IndirectFieldDecl *IFD = cast<IndirectFieldDecl>(VD);<br>
><br>
>      OffsetInBits = 0;<br>
> -    for (IndirectFieldDecl::chain_iterator CI = IFD->chain_begin(),<br>
> -                                           CE = IFD->chain_end();<br>
> -         CI != CE; ++CI)<br>
> -      OffsetInBits += ::getFieldOffset(*this, cast<FieldDecl>(*CI));<br>
> +    for (const auto *CI : IFD->chains())<br>
> +      OffsetInBits += ::getFieldOffset(*this, cast<FieldDecl>(CI));<br>
>    }<br>
><br>
>    return OffsetInBits;<br>
><br>
> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -549,10 +549,8 @@ static void EmitMemberInitializer(CodeGe<br>
>      // If we are initializing an anonymous union field, drill down to<br>
>      // the field.<br>
>      IndirectFieldDecl *IndirectField = MemberInit->getIndirectMember();<br>
> -    IndirectFieldDecl::chain_iterator I = IndirectField->chain_begin(),<br>
> -      IEnd = IndirectField->chain_end();<br>
> -    for ( ; I != IEnd; ++I)<br>
> -      LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(*I));<br>
> +    for (const auto *I : IndirectField->chains())<br>
> +      LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(I));<br>
>      FieldType = MemberInit->getIndirectMember()->getAnonField()->getType();<br>
>    } else {<br>
>      LHS = CGF.EmitLValueForFieldInitialization(LHS, Field);<br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -3487,9 +3487,8 @@ static bool InjectAnonymousStructOrUnion<br>
>          //   anonymous union is declared.<br>
>          unsigned OldChainingSize = Chaining.size();<br>
>          if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD))<br>
> -          for (IndirectFieldDecl::chain_iterator PI = IF->chain_begin(),<br>
> -               PE = IF->chain_end(); PI != PE; ++PI)<br>
> -            Chaining.push_back(*PI);<br>
> +          for (auto *PI : IF->chains())<br>
> +            Chaining.push_back(PI);<br>
>          else<br>
>            Chaining.push_back(VD);<br>
><br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -3413,10 +3413,8 @@ struct BaseAndFieldInfo {<br>
>      if (!Indirect)<br>
>        return isInactiveUnionMember(Field);<br>
><br>
> -    for (IndirectFieldDecl::chain_iterator C = Indirect->chain_begin(),<br>
> -                                           CEnd = Indirect->chain_end();<br>
> -         C != CEnd; ++C) {<br>
> -      FieldDecl *Field = dyn_cast<FieldDecl>(*C);<br>
> +    for (auto *C : Indirect->chains()) {<br>
> +      FieldDecl *Field = dyn_cast<FieldDecl>(C);<br>
>        if (Field && isInactiveUnionMember(Field))<br>
>          return true;<br>
>      }<br>
> @@ -3564,10 +3562,8 @@ bool Sema::SetCtorInitializers(CXXConstr<br>
>        Info.AllBaseFields[Member->getAnyMember()] = Member;<br>
><br>
>        if (IndirectFieldDecl *F = Member->getIndirectMember()) {<br>
> -        for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),<br>
> -                                            CEnd = F->chain_end();<br>
> -             C != CEnd; ++C) {<br>
> -          FieldDecl *FD = dyn_cast<FieldDecl>(*C);<br>
> +        for (auto *C : F->chains()) {<br>
> +          FieldDecl *FD = dyn_cast<FieldDecl>(C);<br>
>            if (FD && FD->getParent()->isUnion())<br>
>              Info.ActiveUnionMember.insert(std::make_pair(<br>
>                  FD->getParent()->getCanonicalDecl(), FD->getCanonicalDecl()));<br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -10229,12 +10229,10 @@ ExprResult Sema::BuildBuiltinOffsetOf(So<br>
>      }<br>
><br>
>      if (IndirectMemberDecl) {<br>
> -      for (IndirectFieldDecl::chain_iterator FI =<br>
> -           IndirectMemberDecl->chain_begin(),<br>
> -           FEnd = IndirectMemberDecl->chain_end(); FI != FEnd; FI++) {<br>
> -        assert(isa<FieldDecl>(*FI));<br>
> +      for (auto *FI : IndirectMemberDecl->chains()) {<br>
> +        assert(isa<FieldDecl>(FI));<br>
>          Comps.push_back(OffsetOfNode(OC.LocStart,<br>
> -                                     cast<FieldDecl>(*FI), OC.LocEnd));<br>
> +                                     cast<FieldDecl>(FI), OC.LocEnd));<br>
>        }<br>
>      } else<br>
>        Comps.push_back(OffsetOfNode(OC.LocStart, MemberDecl, OC.LocEnd));<br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -562,10 +562,8 @@ Decl *TemplateDeclInstantiator::VisitInd<br>
>      new (SemaRef.Context)NamedDecl*[D->getChainingSize()];<br>
><br>
>    int i = 0;<br>
> -  for (IndirectFieldDecl::chain_iterator PI =<br>
> -       D->chain_begin(), PE = D->chain_end();<br>
> -       PI != PE; ++PI) {<br>
> -    NamedDecl *Next = SemaRef.FindInstantiatedDecl(D->getLocation(), *PI,<br>
> +  for (auto *PI : D->chains()) {<br>
> +    NamedDecl *Next = SemaRef.FindInstantiatedDecl(D->getLocation(), PI,<br>
>                                                TemplateArgs);<br>
>      if (!Next)<br>
>        return 0;<br>
><br>
> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=203261&r1=203260&r2=203261&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original)<br>
> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Fri Mar  7 12:11:58 2014<br>
> @@ -686,10 +686,8 @@ void ASTDeclWriter::VisitIndirectFieldDe<br>
>    VisitValueDecl(D);<br>
>    Record.push_back(D->getChainingSize());<br>
><br>
> -  for (IndirectFieldDecl::chain_iterator<br>
> -       P = D->chain_begin(),<br>
> -       PEnd = D->chain_end(); P != PEnd; ++P)<br>
> -    Writer.AddDeclRef(*P, Record);<br>
> +  for (const auto *P : D->chains())<br>
> +    Writer.AddDeclRef(P, Record);<br>
>    Code = serialization::DECL_INDIRECTFIELD;<br>
>  }<br>
><br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</p>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>