Adding new AST matcher: isConstexpr

It matches constexpr variable and function declarations.

llvm-svn: 238016
This commit is contained in:
Szabolcs Sipos 2015-05-22 11:35:50 +00:00
parent 575f7d4f1c
commit b37b0ed239
2 changed files with 24 additions and 0 deletions

View File

@ -2709,6 +2709,23 @@ AST_MATCHER(FunctionDecl, isDeleted) {
return Node.isDeleted();
}
/// \brief Matches constexpr variable and function declarations.
///
/// Given:
/// \code
/// constexpr int foo = 42;
/// constexpr int bar();
/// \endcode
/// varDecl(isConstexpr())
/// matches the declaration of foo.
/// functionDecl(isConstexpr())
/// matches the declaration of bar.
AST_POLYMORPHIC_MATCHER(isConstexpr,
AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl,
FunctionDecl)) {
return Node.isConstexpr();
}
/// \brief Matches the condition expression of an if statement, for loop,
/// or conditional operator.
///

View File

@ -1595,6 +1595,13 @@ TEST(IsDeleted, MatchesDeletedFunctionDeclarations) {
functionDecl(hasName("Func"), isDeleted())));
}
TEST(isConstexpr, MatchesConstexprDeclarations) {
EXPECT_TRUE(matches("constexpr int foo = 42;",
varDecl(hasName("foo"), isConstexpr())));
EXPECT_TRUE(matches("constexpr int bar();",
functionDecl(hasName("bar"), isConstexpr())));
}
TEST(HasAnyParameter, DoesntMatchIfInnerMatcherDoesntMatch) {
EXPECT_TRUE(notMatches("class Y {}; class X { void x(int) {} };",
methodDecl(hasAnyParameter(hasType(recordDecl(hasName("X")))))));