diff options
| author | David Blaikie <dblaikie@gmail.com> | 2012-05-01 00:48:43 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2012-05-01 00:48:43 +0000 |
| commit | b15de1eaedfc0344161f00f270c2d495a01459a1 (patch) | |
| tree | 1c34db3a8ab474dd61e5b20c1375a46edbe8dc01 | |
| parent | d7bca7629c94c923fe394fad7de303339bc5bced (diff) | |
| download | bcm5719-llvm-b15de1eaedfc0344161f00f270c2d495a01459a1.tar.gz bcm5719-llvm-b15de1eaedfc0344161f00f270c2d495a01459a1.zip | |
Remove ref/value inconsistency in redecl_iterator.
Similar to r155808 - this mistake has been made in a few iterators.
Based on Chandler Carruth's feedback to r155808 I added an implicit conversion
to Decl* to ease adoption/usage. Useful for the pointer comparison, but not the
dyn_cast (due to template argument deduction causing the conversion not to be
used) - there for future convenience, though. This idiom (op T* for iterators)
seems to be fairly idiomatic within the LLVM codebase & I'll likely add it as I
fix up the other iterators here.
llvm-svn: 155869
| -rw-r--r-- | clang/include/clang/AST/DeclBase.h | 11 | ||||
| -rw-r--r-- | clang/lib/ARCMigrate/TransGCAttrs.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/IdentifierResolver.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaLookup.cpp | 2 |
4 files changed, 9 insertions, 8 deletions
diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h index e8f57df1592..555ce3c4b6c 100644 --- a/clang/include/clang/AST/DeclBase.h +++ b/clang/include/clang/AST/DeclBase.h @@ -692,17 +692,18 @@ public: Decl *Starter; public: - typedef Decl* value_type; - typedef Decl* reference; - typedef Decl* pointer; + typedef Decl value_type; + typedef value_type& reference; + typedef value_type* pointer; typedef std::forward_iterator_tag iterator_category; typedef std::ptrdiff_t difference_type; redecl_iterator() : Current(0) { } explicit redecl_iterator(Decl *C) : Current(C), Starter(C) { } - reference operator*() const { return Current; } + reference operator*() const { return *Current; } pointer operator->() const { return Current; } + operator pointer() const { return Current; } redecl_iterator& operator++() { assert(Current && "Advancing while iterator has reached end"); @@ -1320,7 +1321,7 @@ public: filtered_decl_iterator() : Current() { } - /// specific_decl_iterator - Construct a new iterator over a + /// filtered_decl_iterator - Construct a new iterator over a /// subset of the declarations the range [C, /// end-of-declarations). If A is non-NULL, it is a pointer to a /// member function of SpecificDecl that should return true for diff --git a/clang/lib/ARCMigrate/TransGCAttrs.cpp b/clang/lib/ARCMigrate/TransGCAttrs.cpp index a206683bc3d..007b8f2f88c 100644 --- a/clang/lib/ARCMigrate/TransGCAttrs.cpp +++ b/clang/lib/ARCMigrate/TransGCAttrs.cpp @@ -166,7 +166,7 @@ public: for (Decl::redecl_iterator I = D->redecls_begin(), E = D->redecls_end(); I != E; ++I) - if (!isInMainFile((*I)->getLocation())) + if (!isInMainFile(I->getLocation())) return false; return true; diff --git a/clang/lib/Sema/IdentifierResolver.cpp b/clang/lib/Sema/IdentifierResolver.cpp index 4d62cab1676..4c6898cb7a5 100644 --- a/clang/lib/Sema/IdentifierResolver.cpp +++ b/clang/lib/Sema/IdentifierResolver.cpp @@ -304,7 +304,7 @@ static DeclMatchKind compareDeclarations(NamedDecl *Existing, NamedDecl *New) { for (Decl::redecl_iterator RD = New->redecls_begin(), RDEnd = New->redecls_end(); RD != RDEnd; ++RD) { - if (*RD == Existing) + if (RD == Existing) return DMK_Replace; if (RD->isCanonicalDecl()) diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index 9f5138ba4a4..3a6e2903260 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -1069,7 +1069,7 @@ static NamedDecl *getVisibleDecl(NamedDecl *D) { for (Decl::redecl_iterator RD = D->redecls_begin(), RDEnd = D->redecls_end(); RD != RDEnd; ++RD) { - if (NamedDecl *ND = dyn_cast<NamedDecl>(*RD)) { + if (NamedDecl *ND = dyn_cast<NamedDecl>(&*RD)) { if (LookupResult::isVisible(ND)) return ND; } |

