forked from OSchip/llvm-project
![]() //AST Matcher// `hasBody` is a polymorphic matcher that behaves differently for loop statements and function declarations. The main difference is the for functions declarations it does not only call `FunctionDecl::getBody()` but first checks whether the declaration in question is that specific declaration which has the body by calling `FunctionDecl::doesThisDeclarationHaveABody()`. This is achieved by specialization of the template `GetBodyMatcher`. Unfortunately template specializations do not catch the descendants of the class for which the template is specialized. Therefore it does not work correcly for the descendants of `FunctionDecl`, such as `CXXMethodDecl`, `CXXConstructorDecl`, `CXXDestructorDecl` etc. This patch fixes this issue by using a template metaprogram. The patch also introduces a new matcher `hasAnyBody` which matches declarations which have a body present in the AST but not necessarily belonging to that particular declaration. Differential Revision: https://reviews.llvm.org/D87527 |
||
---|---|---|
.. | ||
Dynamic | ||
ASTMatchersInternalTest.cpp | ||
ASTMatchersNarrowingTest.cpp | ||
ASTMatchersNodeTest.cpp | ||
ASTMatchersTest.h | ||
ASTMatchersTraversalTest.cpp | ||
CMakeLists.txt | ||
GtestMatchersTest.cpp |