Index: include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -3464,14 +3464,14 @@ /// \brief Matches if a node equals another node. /// /// \c Decl has pointer identity in the AST. -AST_MATCHER_P_OVERLOAD(Decl, equalsNode, Decl*, Other, 0) { +AST_MATCHER_P_OVERLOAD(Decl, equalsNode, const Decl*, Other, 0) { return &Node == Other; } /// \brief Matches if a node equals another node. /// /// \c Stmt has pointer identity in the AST. /// -AST_MATCHER_P_OVERLOAD(Stmt, equalsNode, Stmt*, Other, 1) { +AST_MATCHER_P_OVERLOAD(Stmt, equalsNode, const Stmt*, Other, 1) { return &Node == Other; } Index: include/clang/ASTMatchers/ASTMatchersMacros.h =================================================================== --- include/clang/ASTMatchers/ASTMatchersMacros.h +++ include/clang/ASTMatchers/ASTMatchersMacros.h @@ -52,9 +52,9 @@ 0) #define AST_MATCHER_FUNCTION_P_OVERLOAD(ReturnType, DefineMatcher, ParamType, \ Param, OverloadId) \ - inline ReturnType DefineMatcher(const ParamType &Param); \ - typedef ReturnType (&DefineMatcher##_Type##OverloadId)(const ParamType &); \ - inline ReturnType DefineMatcher(const ParamType &Param) + inline ReturnType DefineMatcher(ParamType const &Param); \ + typedef ReturnType (&DefineMatcher##_Type##OverloadId)(ParamType const &); \ + inline ReturnType DefineMatcher(ParamType const &Param) /// \brief AST_MATCHER(Type, DefineMatcher) { ... } /// defines a zero parameter function named DefineMatcher() that returns a @@ -107,21 +107,21 @@ : public MatcherInterface { \ public: \ explicit matcher_##DefineMatcher##OverloadId##Matcher( \ - const ParamType &A##Param) \ + ParamType const &A##Param) \ : Param(A##Param) {} \ bool matches(const Type &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const override; \ \ private: \ - const ParamType Param; \ + ParamType const Param; \ }; \ } \ - inline internal::Matcher DefineMatcher(const ParamType &Param) { \ + inline internal::Matcher DefineMatcher(ParamType const &Param) { \ return internal::makeMatcher( \ new internal::matcher_##DefineMatcher##OverloadId##Matcher(Param)); \ } \ typedef internal::Matcher(&DefineMatcher##_Type##OverloadId)( \ - const ParamType &Param); \ + ParamType const &Param); \ inline bool internal::matcher_##DefineMatcher##OverloadId##Matcher::matches( \ const Type &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const @@ -151,25 +151,25 @@ class matcher_##DefineMatcher##OverloadId##Matcher \ : public MatcherInterface { \ public: \ - matcher_##DefineMatcher##OverloadId##Matcher(const ParamType1 &A##Param1, \ - const ParamType2 &A##Param2) \ + matcher_##DefineMatcher##OverloadId##Matcher(ParamType1 const &A##Param1, \ + ParamType2 const &A##Param2) \ : Param1(A##Param1), Param2(A##Param2) {} \ bool matches(const Type &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const override; \ \ private: \ - const ParamType1 Param1; \ - const ParamType2 Param2; \ + ParamType1 const Param1; \ + ParamType2 const Param2; \ }; \ } \ - inline internal::Matcher DefineMatcher(const ParamType1 &Param1, \ - const ParamType2 &Param2) { \ + inline internal::Matcher DefineMatcher(ParamType1 const &Param1, \ + ParamType2 const &Param2) { \ return internal::makeMatcher( \ new internal::matcher_##DefineMatcher##OverloadId##Matcher(Param1, \ Param2)); \ } \ typedef internal::Matcher(&DefineMatcher##_Type##OverloadId)( \ - const ParamType1 &Param1, const ParamType2 &Param2); \ + ParamType1 const &Param1, ParamType2 const &Param2); \ inline bool internal::matcher_##DefineMatcher##OverloadId##Matcher::matches( \ const Type &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const @@ -240,18 +240,18 @@ : public MatcherInterface { \ public: \ explicit matcher_##DefineMatcher##OverloadId##Matcher( \ - const ParamType &A##Param) \ + ParamType const &A##Param) \ : Param(A##Param) {} \ bool matches(const NodeType &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const override; \ \ private: \ - const ParamType Param; \ + ParamType const Param; \ }; \ } \ inline internal::PolymorphicMatcherWithParam1< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType, \ - ReturnTypesF> DefineMatcher(const ParamType &Param) { \ + ReturnTypesF> DefineMatcher(ParamType const &Param) { \ return internal::PolymorphicMatcherWithParam1< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType, \ ReturnTypesF>(Param); \ @@ -259,7 +259,7 @@ typedef internal::PolymorphicMatcherWithParam1< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType, \ ReturnTypesF>(&DefineMatcher##_Type##OverloadId)( \ - const ParamType &Param); \ + ParamType const &Param); \ template \ bool internal::matcher_##DefineMatcher##OverloadId##Matcher< \ NodeType, ParamT>::matches(const NodeType &Node, ASTMatchFinder *Finder, \ @@ -286,21 +286,21 @@ class matcher_##DefineMatcher##OverloadId##Matcher \ : public MatcherInterface { \ public: \ - matcher_##DefineMatcher##OverloadId##Matcher(const ParamType1 &A##Param1, \ - const ParamType2 &A##Param2) \ + matcher_##DefineMatcher##OverloadId##Matcher(ParamType1 const &A##Param1, \ + ParamType2 const &A##Param2) \ : Param1(A##Param1), Param2(A##Param2) {} \ bool matches(const NodeType &Node, ASTMatchFinder *Finder, \ BoundNodesTreeBuilder *Builder) const override; \ \ private: \ - const ParamType1 Param1; \ - const ParamType2 Param2; \ + ParamType1 const Param1; \ + ParamType2 const Param2; \ }; \ } \ inline internal::PolymorphicMatcherWithParam2< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType1, \ - ParamType2, ReturnTypesF> DefineMatcher(const ParamType1 &Param1, \ - const ParamType2 &Param2) { \ + ParamType2, ReturnTypesF> DefineMatcher(ParamType1 const &Param1, \ + ParamType2 const &Param2) { \ return internal::PolymorphicMatcherWithParam2< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType1, \ ParamType2, ReturnTypesF>(Param1, Param2); \ @@ -308,7 +308,7 @@ typedef internal::PolymorphicMatcherWithParam2< \ internal::matcher_##DefineMatcher##OverloadId##Matcher, ParamType1, \ ParamType2, ReturnTypesF>(&DefineMatcher##_Type##OverloadId)( \ - const ParamType1 &Param1, const ParamType2 &Param2); \ + ParamType1 const &Param1, ParamType2 const &Param2); \ template \ bool internal::matcher_##DefineMatcher##OverloadId##Matcher< \ NodeType, ParamT1, ParamT2>::matches( \ Index: unittests/ASTMatchers/ASTMatchersTest.cpp =================================================================== --- unittests/ASTMatchers/ASTMatchersTest.cpp +++ unittests/ASTMatchers/ASTMatchersTest.cpp @@ -4135,17 +4135,19 @@ virtual bool run(const BoundNodes *Nodes, ASTContext *Context) { const T *Node = Nodes->getNodeAs(""); - return verify(*Nodes, *Context, Node); + return verify(*Nodes, *Context, Node, Node); } - bool verify(const BoundNodes &Nodes, ASTContext &Context, const Stmt *Node) { + bool verify(const BoundNodes &Nodes, ASTContext &Context, const T *Node, + const Stmt *) { return selectFirst( - "", match(stmt(hasParent(stmt(has(stmt(equalsNode(Node)))).bind(""))), + "", match(stmt(hasParent(stmt(has(stmt(equalsNode(Node)).bind(""))))), *Node, Context)) != NULL; } - bool verify(const BoundNodes &Nodes, ASTContext &Context, const Decl *Node) { + bool verify(const BoundNodes &Nodes, ASTContext &Context, const T *Node, + const Decl *) { return selectFirst( - "", match(decl(hasParent(decl(has(decl(equalsNode(Node)))).bind(""))), + "", match(decl(hasParent(decl(has(decl(equalsNode(Node)).bind(""))))), *Node, Context)) != NULL; } }; @@ -4153,10 +4155,10 @@ TEST(IsEqualTo, MatchesNodesByIdentity) { EXPECT_TRUE(matchAndVerifyResultTrue( "class X { class Y {}; };", recordDecl(hasName("::X::Y")).bind(""), - new VerifyAncestorHasChildIsEqual())); + new VerifyAncestorHasChildIsEqual())); EXPECT_TRUE( matchAndVerifyResultTrue("void f() { if(true) {} }", ifStmt().bind(""), - new VerifyAncestorHasChildIsEqual())); + new VerifyAncestorHasChildIsEqual())); } class VerifyStartOfTranslationUnit : public MatchFinder::MatchCallback {