forked from OSchip/llvm-project
[ASTMatchers] Overload isConstexpr for ifStmts
Differential Revision: https://reviews.llvm.org/D46233 llvm-svn: 331759
This commit is contained in:
parent
d8e76494fc
commit
3cd0aa3b7e
|
@ -2789,15 +2789,19 @@ auto Y() -> int {}
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>></td><td class="name" onclick="toggle('isConstexpr1')"><a name="isConstexpr1Anchor">isConstexpr</a></td><td></td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>></td><td class="name" onclick="toggle('isConstexpr1')"><a name="isConstexpr1Anchor">isConstexpr</a></td><td></td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="isConstexpr1"><pre>Matches constexpr variable and function declarations.
|
<tr><td colspan="4" class="doc" id="isConstexpr1"><pre>Matches constexpr variable and function declarations,
|
||||||
|
and if constexpr.
|
||||||
|
|
||||||
Given:
|
Given:
|
||||||
constexpr int foo = 42;
|
constexpr int foo = 42;
|
||||||
constexpr int bar();
|
constexpr int bar();
|
||||||
|
void baz() { if constexpr(1 > 0) {} }
|
||||||
varDecl(isConstexpr())
|
varDecl(isConstexpr())
|
||||||
matches the declaration of foo.
|
matches the declaration of foo.
|
||||||
functionDecl(isConstexpr())
|
functionDecl(isConstexpr())
|
||||||
matches the declaration of bar.
|
matches the declaration of bar.
|
||||||
|
ifStmt(isConstexpr())
|
||||||
|
matches the if statement in baz.
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3039,6 +3043,23 @@ functionProtoType(parameterCountIs(3))
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>></td><td class="name" onclick="toggle('isConstexpr2')"><a name="isConstexpr2Anchor">isConstexpr</a></td><td></td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="isConstexpr2"><pre>Matches constexpr variable and function declarations,
|
||||||
|
and if constexpr.
|
||||||
|
|
||||||
|
Given:
|
||||||
|
constexpr int foo = 42;
|
||||||
|
constexpr int bar();
|
||||||
|
void baz() { if constexpr(1 > 0) {} }
|
||||||
|
varDecl(isConstexpr())
|
||||||
|
matches the declaration of foo.
|
||||||
|
functionDecl(isConstexpr())
|
||||||
|
matches the declaration of bar.
|
||||||
|
ifStmt(isConstexpr())
|
||||||
|
matches the if statement in baz.
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>></td><td class="name" onclick="toggle('equals6')"><a name="equals6Anchor">equals</a></td><td>bool Value</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>></td><td class="name" onclick="toggle('equals6')"><a name="equals6Anchor">equals</a></td><td>bool Value</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="equals6"><pre></pre></td></tr>
|
<tr><td colspan="4" class="doc" id="equals6"><pre></pre></td></tr>
|
||||||
|
|
||||||
|
@ -3803,15 +3824,19 @@ int a;
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isConstexpr0')"><a name="isConstexpr0Anchor">isConstexpr</a></td><td></td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isConstexpr0')"><a name="isConstexpr0Anchor">isConstexpr</a></td><td></td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="isConstexpr0"><pre>Matches constexpr variable and function declarations.
|
<tr><td colspan="4" class="doc" id="isConstexpr0"><pre>Matches constexpr variable and function declarations,
|
||||||
|
and if constexpr.
|
||||||
|
|
||||||
Given:
|
Given:
|
||||||
constexpr int foo = 42;
|
constexpr int foo = 42;
|
||||||
constexpr int bar();
|
constexpr int bar();
|
||||||
|
void baz() { if constexpr(1 > 0) {} }
|
||||||
varDecl(isConstexpr())
|
varDecl(isConstexpr())
|
||||||
matches the declaration of foo.
|
matches the declaration of foo.
|
||||||
functionDecl(isConstexpr())
|
functionDecl(isConstexpr())
|
||||||
matches the declaration of bar.
|
matches the declaration of bar.
|
||||||
|
ifStmt(isConstexpr())
|
||||||
|
matches the if statement in baz.
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3763,20 +3763,25 @@ AST_POLYMORPHIC_MATCHER(isNoThrow,
|
||||||
return FnTy->isNothrow();
|
return FnTy->isNothrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Matches constexpr variable and function declarations.
|
/// \brief Matches constexpr variable and function declarations,
|
||||||
|
/// and if constexpr.
|
||||||
///
|
///
|
||||||
/// Given:
|
/// Given:
|
||||||
/// \code
|
/// \code
|
||||||
/// constexpr int foo = 42;
|
/// constexpr int foo = 42;
|
||||||
/// constexpr int bar();
|
/// constexpr int bar();
|
||||||
|
/// void baz() { if constexpr(1 > 0) {} }
|
||||||
/// \endcode
|
/// \endcode
|
||||||
/// varDecl(isConstexpr())
|
/// varDecl(isConstexpr())
|
||||||
/// matches the declaration of foo.
|
/// matches the declaration of foo.
|
||||||
/// functionDecl(isConstexpr())
|
/// functionDecl(isConstexpr())
|
||||||
/// matches the declaration of bar.
|
/// matches the declaration of bar.
|
||||||
|
/// ifStmt(isConstexpr())
|
||||||
|
/// matches the if statement in baz.
|
||||||
AST_POLYMORPHIC_MATCHER(isConstexpr,
|
AST_POLYMORPHIC_MATCHER(isConstexpr,
|
||||||
AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl,
|
AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl,
|
||||||
FunctionDecl)) {
|
FunctionDecl,
|
||||||
|
IfStmt)) {
|
||||||
return Node.isConstexpr();
|
return Node.isConstexpr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -894,6 +894,10 @@ TEST(isConstexpr, MatchesConstexprDeclarations) {
|
||||||
varDecl(hasName("foo"), isConstexpr())));
|
varDecl(hasName("foo"), isConstexpr())));
|
||||||
EXPECT_TRUE(matches("constexpr int bar();",
|
EXPECT_TRUE(matches("constexpr int bar();",
|
||||||
functionDecl(hasName("bar"), isConstexpr())));
|
functionDecl(hasName("bar"), isConstexpr())));
|
||||||
|
EXPECT_TRUE(matchesConditionally("void baz() { if constexpr(1 > 0) {} }",
|
||||||
|
ifStmt(isConstexpr()), true, "-std=c++17"));
|
||||||
|
EXPECT_TRUE(matchesConditionally("void baz() { if (1 > 0) {} }",
|
||||||
|
ifStmt(isConstexpr()), false, "-std=c++17"));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(TemplateArgumentCountIs, Matches) {
|
TEST(TemplateArgumentCountIs, Matches) {
|
||||||
|
|
Loading…
Reference in New Issue