<div dir="ltr">Let's not forget to regenerate LibASTMatchersReference.html (see clang/docs/tools/dump_ast_matchers.py).</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jul 23, 2018 at 5:59 PM Jonas Toth via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jonastoth<br>
Date: Mon Jul 23 08:59:27 2018<br>
New Revision: 337703<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=337703&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=337703&view=rev</a><br>
Log:<br>
[ASTMatchers] add matcher for decltypeType and its underlyingType<br>
<br>
Summary:<br>
This patch introduces a new matcher for `DecltypeType` and its underlying type<br>
in order to fix a bug in clang-tidy, see <a href="https://reviews.llvm.org/D48717" rel="noreferrer" target="_blank">https://reviews.llvm.org/D48717</a> for more.<br>
<br>
Reviewers: aaron.ballman, alexfh, NoQ, dcoughlin<br>
<br>
Reviewed By: aaron.ballman<br>
<br>
Subscribers: cfe-commits<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D48759" rel="noreferrer" target="_blank">https://reviews.llvm.org/D48759</a><br>
<br>
Modified:<br>
    cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h<br>
    cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp<br>
    cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp<br>
    cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp<br>
<br>
Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=337703&r1=337702&r2=337703&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=337703&r1=337702&r2=337703&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)<br>
+++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Mon Jul 23 08:59:27 2018<br>
@@ -5111,6 +5111,18 @@ AST_TYPELOC_TRAVERSE_MATCHER_DECL(hasVal<br>
 ///   matches "auto n" and "auto i"<br>
 extern const AstTypeMatcher<AutoType> autoType;<br>
<br>
+/// Matches types nodes representing C++11 decltype(<expr>) types.<br>
+///<br>
+/// Given:<br>
+/// \code<br>
+///   short i = 1;<br>
+///   int j = 42;<br>
+///   decltype(i + j) result = i + j;<br>
+/// \endcode<br>
+/// decltypeType() <br>
+///   matches "decltype(i + j)"<br>
+extern const AstTypeMatcher<DecltypeType> decltypeType;<br>
+<br>
 /// Matches \c AutoType nodes where the deduced type is a specific type.<br>
 ///<br>
 /// Note: There is no \c TypeLoc for the deduced type and thus no<br>
@@ -5128,6 +5140,20 @@ extern const AstTypeMatcher<AutoType> au<br>
 AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType,<br>
                           AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType));<br>
<br>
+/// Matches \c DecltypeType nodes to find out the underlying type.<br>
+///<br>
+/// Given<br>
+/// \code<br>
+///   decltype(1) a = 1;<br>
+///   decltype(2.0) b = 2.0;<br>
+/// \endcode<br>
+/// decltypeType(hasUnderlyingType(isInteger()))<br>
+///   matches "auto a"<br>
+///<br>
+/// Usable as: Matcher<DecltypeType><br>
+AST_TYPE_TRAVERSE_MATCHER(hasUnderlyingType, getUnderlyingType,<br>
+                          AST_POLYMORPHIC_SUPPORTED_TYPES(DecltypeType));<br>
+<br>
 /// Matches \c FunctionType nodes.<br>
 ///<br>
 /// Given<br>
<br>
Modified: cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp?rev=337703&r1=337702&r2=337703&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp?rev=337703&r1=337702&r2=337703&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp (original)<br>
+++ cfe/trunk/lib/ASTMatchers/ASTMatchersInternal.cpp Mon Jul 23 08:59:27 2018<br>
@@ -800,6 +800,7 @@ const AstTypeMatcher<IncompleteArrayType<br>
 const AstTypeMatcher<VariableArrayType> variableArrayType;<br>
 const AstTypeMatcher<AtomicType> atomicType;<br>
 const AstTypeMatcher<AutoType> autoType;<br>
+const AstTypeMatcher<DecltypeType> decltypeType;<br>
 const AstTypeMatcher<FunctionType> functionType;<br>
 const AstTypeMatcher<FunctionProtoType> functionProtoType;<br>
 const AstTypeMatcher<ParenType> parenType;<br>
<br>
Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp?rev=337703&r1=337702&r2=337703&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp?rev=337703&r1=337702&r2=337703&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp (original)<br>
+++ cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp Mon Jul 23 08:59:27 2018<br>
@@ -188,6 +188,7 @@ RegistryMaps::RegistryMaps() {<br>
   REGISTER_MATCHER(decayedType);<br>
   REGISTER_MATCHER(decl);<br>
   REGISTER_MATCHER(declaratorDecl);<br>
+  REGISTER_MATCHER(decltypeType);<br>
   REGISTER_MATCHER(declCountIs);<br>
   REGISTER_MATCHER(declRefExpr);<br>
   REGISTER_MATCHER(declStmt);<br>
<br>
Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp?rev=337703&r1=337702&r2=337703&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp?rev=337703&r1=337702&r2=337703&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp (original)<br>
+++ cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp Mon Jul 23 08:59:27 2018<br>
@@ -1206,6 +1206,12 @@ TEST(TypeMatching, MatchesAutoTypes) {<br>
   //                       autoType(hasDeducedType(isInteger()))));<br>
 }<br>
<br>
+TEST(TypeMatching, MatchesDeclTypes) {<br>
+  EXPECT_TRUE(matches("decltype(1 + 1) sum = 1 + 1;", decltypeType()));<br>
+  EXPECT_TRUE(matches("decltype(1 + 1) sum = 1 + 1;",<br>
+                      decltypeType(hasUnderlyingType(isInteger()))));<br>
+}<br>
+<br>
 TEST(TypeMatching, MatchesFunctionTypes) {<br>
   EXPECT_TRUE(matches("int (*f)(int);", functionType()));<br>
   EXPECT_TRUE(matches("void f(int i) {}", functionType()));<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>