Index: include/clang/ASTMatchers/ASTMatchFinder.h =================================================================== --- include/clang/ASTMatchers/ASTMatchFinder.h +++ include/clang/ASTMatchers/ASTMatchFinder.h @@ -42,6 +42,7 @@ #define LLVM_CLANG_ASTMATCHERS_ASTMATCHFINDER_H #include "clang/ASTMatchers/ASTMatchers.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/Timer.h" @@ -208,7 +209,7 @@ NestedNameSpecifierLoc; std::vector> TypeLoc; /// \brief All the callbacks in one container to simplify iteration. - std::vector AllCallbacks; + llvm::SmallPtrSet AllCallbacks; }; private: Index: lib/ASTMatchers/ASTMatchFinder.cpp =================================================================== --- lib/ASTMatchers/ASTMatchFinder.cpp +++ lib/ASTMatchers/ASTMatchFinder.cpp @@ -913,37 +913,37 @@ void MatchFinder::addMatcher(const DeclarationMatcher &NodeMatch, MatchCallback *Action) { Matchers.DeclOrStmt.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } void MatchFinder::addMatcher(const TypeMatcher &NodeMatch, MatchCallback *Action) { Matchers.Type.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } void MatchFinder::addMatcher(const StatementMatcher &NodeMatch, MatchCallback *Action) { Matchers.DeclOrStmt.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } void MatchFinder::addMatcher(const NestedNameSpecifierMatcher &NodeMatch, MatchCallback *Action) { Matchers.NestedNameSpecifier.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } void MatchFinder::addMatcher(const NestedNameSpecifierLocMatcher &NodeMatch, MatchCallback *Action) { Matchers.NestedNameSpecifierLoc.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } void MatchFinder::addMatcher(const TypeLocMatcher &NodeMatch, MatchCallback *Action) { Matchers.TypeLoc.emplace_back(NodeMatch, Action); - Matchers.AllCallbacks.push_back(Action); + Matchers.AllCallbacks.insert(Action); } bool MatchFinder::addDynamicMatcher(const internal::DynTypedMatcher &NodeMatch,