r203942 - [C++11] Replacing VarTemplateDecl iterators spec_begin() and spec_end() with iterator_range specializations(). Updating all of the usages of the iterators with range-based for loops.

Aaron Ballman aaron at aaronballman.com
Fri Mar 14 10:35:08 PDT 2014


On Fri, Mar 14, 2014 at 1:29 PM, Duncan P. N. Exon Smith
<dexonsmith at apple.com> wrote:
>
> On Mar 14, 2014, at 9:29 AM, Aaron Ballman <aaron at aaronballman.com> wrote:
>
>> Author: aaronballman
>> Date: Fri Mar 14 11:29:14 2014
>> New Revision: 203942
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=203942&view=rev
>> Log:
>> [C++11] Replacing VarTemplateDecl iterators spec_begin() and spec_end() with iterator_range specializations(). 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/DeclTemplate.h
>>    cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
>>
>> Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=203942&r1=203941&r2=203942&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original)
>> +++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Fri Mar 14 11:29:14 2014
>> @@ -1460,9 +1460,7 @@ template <typename Derived>
>> bool DataRecursiveASTVisitor<Derived>::TraverseVariableInstantiations(
>>     VarTemplateDecl *D) {
>>   VarTemplateDecl::spec_iterator end = D->spec_end();
>> -  for (VarTemplateDecl::spec_iterator it = D->spec_begin(); it != end; ++it) {
>> -    VarTemplateSpecializationDecl *SD = *it;
>> -
>> +  for (auto *SD : D->specializations()) {
>>     switch (SD->getSpecializationKind()) {
>>     // Visit the implicit instantiations with the requested pattern.
>>     case TSK_Undeclared:
>>
>> Modified: cfe/trunk/include/clang/AST/DeclTemplate.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclTemplate.h?rev=203942&r1=203941&r2=203942&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DeclTemplate.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclTemplate.h Fri Mar 14 11:29:14 2014
>> @@ -2776,6 +2776,11 @@ public:
>>       VarTemplatePartialSpecializationDecl *D);
>>
>>   typedef SpecIterator<VarTemplateSpecializationDecl> spec_iterator;
>> +  typedef llvm::iterator_range<spec_iterator> spec_range;
>> +
>> +  spec_range specializations() const {
>> +    return spec_range(spec_begin(), spec_end());
>> +  }
>>
>>   spec_iterator spec_begin() const {
>>     return makeSpecIterator(getSpecializations(), false);
>>
>> Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=203942&r1=203941&r2=203942&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
>> +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Fri Mar 14 11:29:14 2014
>> @@ -1501,10 +1501,7 @@ template<typename Derived>
>> bool RecursiveASTVisitor<Derived>::TraverseTemplateInstantiations(           \
>>     TMPLDECLKIND##TemplateDecl *D) {                                         \
>>   TMPLDECLKIND##TemplateDecl::spec_iterator end = D->spec_end();             \
>
> FYI, this (and a few other similar commits) introduced unused variable warnings
> because you left end around.  Fixed in r203948.

Thanks for fixing it up -- MSVC doesn't always warn on unused
variables, sorry for the hassle!

~Aaron



More information about the cfe-commits mailing list