diff options
| -rw-r--r-- | clang/include/clang/ASTMatchers/ASTMatchers.h | 2 | ||||
| -rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersTest.cpp | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index f317981517f..4501a42149f 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -2993,7 +2993,7 @@ AST_MATCHER(CXXMethodDecl, isConst) { /// \endcode /// matches B::x AST_MATCHER(CXXMethodDecl, isOverride) { - return Node.size_overridden_methods() > 0; + return Node.size_overridden_methods() > 0 || Node.hasAttr<OverrideAttr>(); } /// \brief Matches member expressions that are called with '->' as opposed diff --git a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp index 0d27b5db034..dab22e33cda 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -1790,6 +1790,9 @@ TEST(Matcher, MatchesOverridingMethod) { methodDecl(isOverride()))); EXPECT_TRUE(notMatches("class X { int f(); int f(int); }; ", methodDecl(isOverride()))); + EXPECT_TRUE( + matches("template <typename Base> struct Y : Base { void f() override;};", + methodDecl(isOverride(), hasName("::Y::f")))); } TEST(Matcher, ConstructorCall) { |

