Add an AST matcher for narrowing when a type is volatile-qualified.
llvm-svn: 253882
This commit is contained in:
parent
19c1922c04
commit
6290fc9154
|
|
@ -2517,6 +2517,23 @@ matches "a(int)", "b(long)", but not "c(double)".
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('isVolatileQualified0')"><a name="isVolatileQualified0Anchor">isVolatileQualified</a></td><td></td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="isVolatileQualified0"><pre>Matches QualType nodes that are volatile-qualified, i.e., that
|
||||||
|
include "top-level" volatile.
|
||||||
|
|
||||||
|
Given
|
||||||
|
void a(int);
|
||||||
|
void b(int volatile);
|
||||||
|
void c(volatile int);
|
||||||
|
void d(volatile int*);
|
||||||
|
void e(int volatile) {};
|
||||||
|
functionDecl(hasAnyParameter(hasType(isVolatileQualified())))
|
||||||
|
matches "void b(int volatile)", "void c(volatile int)" and
|
||||||
|
"void e(int volatile) {}". It does not match d as there
|
||||||
|
is no top-level volatile on the parameter type "volatile int *".
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>></td><td class="name" onclick="toggle('isClass0')"><a name="isClass0Anchor">isClass</a></td><td></td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>></td><td class="name" onclick="toggle('isClass0')"><a name="isClass0Anchor">isClass</a></td><td></td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="isClass0"><pre>Matches RecordDecl object that are spelled with "class."
|
<tr><td colspan="4" class="doc" id="isClass0"><pre>Matches RecordDecl object that are spelled with "class."
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3524,6 +3524,25 @@ AST_MATCHER(QualType, isConstQualified) {
|
||||||
return Node.isConstQualified();
|
return Node.isConstQualified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Matches QualType nodes that are volatile-qualified, i.e., that
|
||||||
|
/// include "top-level" volatile.
|
||||||
|
///
|
||||||
|
/// Given
|
||||||
|
/// \code
|
||||||
|
/// void a(int);
|
||||||
|
/// void b(int volatile);
|
||||||
|
/// void c(volatile int);
|
||||||
|
/// void d(volatile int*);
|
||||||
|
/// void e(int volatile) {};
|
||||||
|
/// \endcode
|
||||||
|
/// functionDecl(hasAnyParameter(hasType(isVolatileQualified())))
|
||||||
|
/// matches "void b(int volatile)", "void c(volatile int)" and
|
||||||
|
/// "void e(int volatile) {}". It does not match d as there
|
||||||
|
/// is no top-level volatile on the parameter type "volatile int *".
|
||||||
|
AST_MATCHER(QualType, isVolatileQualified) {
|
||||||
|
return Node.isVolatileQualified();
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Matches QualType nodes that have local CV-qualifiers attached to
|
/// \brief Matches QualType nodes that have local CV-qualifiers attached to
|
||||||
/// the node, not hidden within a typedef.
|
/// the node, not hidden within a typedef.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -298,6 +298,7 @@ RegistryMaps::RegistryMaps() {
|
||||||
REGISTER_MATCHER(isUnion);
|
REGISTER_MATCHER(isUnion);
|
||||||
REGISTER_MATCHER(isVariadic);
|
REGISTER_MATCHER(isVariadic);
|
||||||
REGISTER_MATCHER(isVirtual);
|
REGISTER_MATCHER(isVirtual);
|
||||||
|
REGISTER_MATCHER(isVolatileQualified);
|
||||||
REGISTER_MATCHER(isWritten);
|
REGISTER_MATCHER(isWritten);
|
||||||
REGISTER_MATCHER(labelStmt);
|
REGISTER_MATCHER(labelStmt);
|
||||||
REGISTER_MATCHER(lambdaExpr);
|
REGISTER_MATCHER(lambdaExpr);
|
||||||
|
|
|
||||||
|
|
@ -3023,6 +3023,15 @@ TEST(Field, MatchesField) {
|
||||||
EXPECT_TRUE(matches("class X { int m; };", fieldDecl(hasName("m"))));
|
EXPECT_TRUE(matches("class X { int m; };", fieldDecl(hasName("m"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(IsVolatileQualified, QualifiersMatch) {
|
||||||
|
EXPECT_TRUE(matches("volatile int i = 42;",
|
||||||
|
varDecl(hasType(isVolatileQualified()))));
|
||||||
|
EXPECT_TRUE(notMatches("volatile int *i;",
|
||||||
|
varDecl(hasType(isVolatileQualified()))));
|
||||||
|
EXPECT_TRUE(matches("typedef volatile int v_int; v_int i = 42;",
|
||||||
|
varDecl(hasType(isVolatileQualified()))));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(IsConstQualified, MatchesConstInt) {
|
TEST(IsConstQualified, MatchesConstInt) {
|
||||||
EXPECT_TRUE(matches("const int i = 42;",
|
EXPECT_TRUE(matches("const int i = 42;",
|
||||||
varDecl(hasType(isConstQualified()))));
|
varDecl(hasType(isConstQualified()))));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue