From 433204fddc695d6efad545957589307151b10d4e Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Fri, 29 Jan 2016 18:24:34 +0000 Subject: [PATCH] Revert r259210 "Extend hasType narrowing matcher for TypedefDecls, add functionProtoType matcher for FunctionProtoType nodes, extend parameterCountIs to FunctionProtoType nodes." It didn't pass check-clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@259218 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/LibASTMatchersReference.html | 72 +++---------------- include/clang/ASTMatchers/ASTMatchers.h | 36 ++-------- .../clang/ASTMatchers/ASTMatchersInternal.h | 11 --- lib/ASTMatchers/Dynamic/Registry.cpp | 1 - unittests/ASTMatchers/ASTMatchersTest.cpp | 26 +------ 5 files changed, 14 insertions(+), 132 deletions(-) diff --git a/docs/LibASTMatchersReference.html b/docs/LibASTMatchersReference.html index 93408e5776..75deea40e1 100644 --- a/docs/LibASTMatchersReference.html +++ b/docs/LibASTMatchersReference.html @@ -1308,18 +1308,6 @@ c and d. -Matcher<Type>functionProtoTypeMatcher<FunctionProtoType>... -
Matches FunctionProtoType nodes.
-
-Given
-  int (*f)(int);
-  void g();
-functionProtoType()
-  matches "int (*f)(int)" and the type of "g" in C++ mode.
-  In C mode, "g" is not matched because it does not contain a prototype.
-
- - Matcher<Type>functionTypeMatcher<FunctionType>...
Matches FunctionType nodes.
 
@@ -2347,40 +2335,13 @@ compiled in C mode.
 
 
 Matcher<FunctionDecl>parameterCountIsunsigned N
-
Matches FunctionDecls and FunctionProtoTypes that have a
-specific parameter count.
-
-Given
-  void f(int i) {}
-  void g(int i, int j) {}
-  void h(int i, int j);
-  void j(int i);
-  void k(int x, int y, int z, ...);
-functionDecl(parameterCountIs(2))
-  matches void g(int i, int j) {}
-functionProtoType(parameterCountIs(2))
-  matches void h(int i, int j)
-functionProtoType(parameterCountIs(3))
-  matches void k(int x, int y, int z, ...);
-
- - -Matcher<FunctionProtoType>parameterCountIsunsigned N -
Matches FunctionDecls and FunctionProtoTypes that have a
-specific parameter count.
+
Matches FunctionDecls that have a specific parameter count.
 
 Given
   void f(int i) {}
   void g(int i, int j) {}
-  void h(int i, int j);
-  void j(int i);
-  void k(int x, int y, int z, ...);
 functionDecl(parameterCountIs(2))
-  matches void g(int i, int j) {}
-functionProtoType(parameterCountIs(2))
-  matches void h(int i, int j)
-functionProtoType(parameterCountIs(3))
-  matches void k(int x, int y, int z, ...);
+  matches g(int i, int j) {}
 
@@ -4034,8 +3995,8 @@ actual casts "explicit" casts.)
-Matcher<Expr>hasTypeMatcher<Decl> InnerMatcher -
Overloaded to match the declaration of the expression's or value
+Matcher<Expr>hasTypeMatcher<Decl> InnerMatcher
+
Overloaded to match the declaration of the expression's or value
 declaration's type.
 
 In case of a value declaration (for example a variable declaration),
@@ -4059,10 +4020,8 @@ matcher.
 
 Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
             and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
-            and U (matcher = typedefDecl(hasType(asString("int")))
  class X {};
  void y(X &x) { x; X z; }
- typedef int U;
 
@@ -4837,19 +4796,6 @@ Usable as: Any Matcher
-Matcher<TypedefDecl>hasTypeMatcher<QualType> InnerMatcher -
Matches if the expression's or declaration's type matches a type
-matcher.
-
-Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
-            and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
-            and U (matcher = typedefDecl(hasType(asString("int")))
- class X {};
- void y(X &x) { x; X z; }
- typedef int U;
-
- - Matcher<TypedefType>hasDeclarationMatcher<Decl> InnerMatcher
Matches a node if the declaration associated with that node
 matches the given matcher.
@@ -4935,8 +4881,8 @@ usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl())))
   matches using X::b but not using X::a 
-Matcher<ValueDecl>hasTypeMatcher<Decl> InnerMatcher -
Overloaded to match the declaration of the expression's or value
+Matcher<ValueDecl>hasTypeMatcher<Decl> InnerMatcher
+
Overloaded to match the declaration of the expression's or value
 declaration's type.
 
 In case of a value declaration (for example a variable declaration),
@@ -4954,16 +4900,14 @@ Usable as: Matcher<ValueDecl>hasTypeMatcher<QualType> InnerMatcher
-
Matches if the expression's or declaration's type matches a type
+Matcher<ValueDecl>hasTypeMatcher<QualType> InnerMatcher
+
Matches if the expression's or declaration's type matches a type
 matcher.
 
 Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
             and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
-            and U (matcher = typedefDecl(hasType(asString("int")))
  class X {};
  void y(X &x) { x; X z; }
- typedef int U;
 
diff --git a/include/clang/ASTMatchers/ASTMatchers.h b/include/clang/ASTMatchers/ASTMatchers.h index ea81028a7f..c74b4bce9d 100644 --- a/include/clang/ASTMatchers/ASTMatchers.h +++ b/include/clang/ASTMatchers/ASTMatchers.h @@ -2298,17 +2298,14 @@ AST_MATCHER_P_OVERLOAD(CallExpr, callee, internal::Matcher, InnerMatcher, /// /// Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X"))))) /// and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X"))))) -/// and U (matcher = typedefDecl(hasType(asString("int"))) /// \code /// class X {}; /// void y(X &x) { x; X z; } -/// typedef int U; /// \endcode AST_POLYMORPHIC_MATCHER_P_OVERLOAD( - hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, TypedefDecl, ValueDecl), + hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, ValueDecl), internal::Matcher, InnerMatcher, 0) { - return InnerMatcher.matches(internal::getUnderlyingType(Node), - Finder, Builder); + return InnerMatcher.matches(Node.getType(), Finder, Builder); } /// \brief Overloaded to match the declaration of the expression's or value @@ -2954,27 +2951,16 @@ AST_MATCHER_P(FunctionDecl, hasAnyParameter, Node.param_end(), Finder, Builder); } -/// \brief Matches \c FunctionDecls and \c FunctionProtoTypes that have a -/// specific parameter count. +/// \brief Matches \c FunctionDecls that have a specific parameter count. /// /// Given /// \code /// void f(int i) {} /// void g(int i, int j) {} -/// void h(int i, int j); -/// void j(int i); -/// void k(int x, int y, int z, ...); /// \endcode /// functionDecl(parameterCountIs(2)) -/// matches void g(int i, int j) {} -/// functionProtoType(parameterCountIs(2)) -/// matches void h(int i, int j) -/// functionProtoType(parameterCountIs(3)) -/// matches void k(int x, int y, int z, ...); -AST_POLYMORPHIC_MATCHER_P(parameterCountIs, - AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl, - FunctionProtoType), - unsigned, N) { +/// matches g(int i, int j) {} +AST_MATCHER_P(FunctionDecl, parameterCountIs, unsigned, N) { return Node.getNumParams() == N; } @@ -4113,18 +4099,6 @@ AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, /// matches "int (*f)(int)" and the type of "g". AST_TYPE_MATCHER(FunctionType, functionType); -/// \brief Matches \c FunctionProtoType nodes. -/// -/// Given -/// \code -/// int (*f)(int); -/// void g(); -/// \endcode -/// functionProtoType() -/// matches "int (*f)(int)" and the type of "g" in C++ mode. -/// In C mode, "g" is not matched because it does not contain a prototype. -AST_TYPE_MATCHER(FunctionProtoType, functionProtoType); - /// \brief Matches \c ParenType nodes. /// /// Given diff --git a/include/clang/ASTMatchers/ASTMatchersInternal.h b/include/clang/ASTMatchers/ASTMatchersInternal.h index ca0b49137e..2b3fa6ea9c 100644 --- a/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -60,17 +60,6 @@ class BoundNodes; namespace internal { -/// \brief Unifies obtaining the underlying type of a regular node through -/// `getType` and a TypedefNameDecl node through `getUnderlyingType`. -template -inline QualType getUnderlyingType(const NodeType &Node) { - return Node.getType(); -} - -template <> inline QualType getUnderlyingType(const TypedefDecl &Node) { - return Node.getUnderlyingType(); -} - /// \brief Internal version of BoundNodes. Holds all the bound nodes. class BoundNodesMap { public: diff --git a/lib/ASTMatchers/Dynamic/Registry.cpp b/lib/ASTMatchers/Dynamic/Registry.cpp index df4f29d0f0..6aee48416d 100644 --- a/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/lib/ASTMatchers/Dynamic/Registry.cpp @@ -182,7 +182,6 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(forStmt); REGISTER_MATCHER(friendDecl); REGISTER_MATCHER(functionDecl); - REGISTER_MATCHER(functionProtoType); REGISTER_MATCHER(functionTemplateDecl); REGISTER_MATCHER(functionType); REGISTER_MATCHER(gotoStmt); diff --git a/unittests/ASTMatchers/ASTMatchersTest.cpp b/unittests/ASTMatchers/ASTMatchersTest.cpp index 073f2c5093..7fd933718f 100644 --- a/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -1091,16 +1091,6 @@ TEST(HasType, TakesDeclMatcherAndMatchesValueDecl) { notMatches("class X {}; void y() { X *x; }", varDecl(hasType(ClassX)))); } -TEST(HasType, MatchesTypedefDecl) { - EXPECT_TRUE(matches("typedef int X;", typedefDecl(hasType(asString("int"))))); - EXPECT_TRUE(matches("typedef const int T;", - typedefDecl(hasType(asString("const int"))))); - EXPECT_TRUE(notMatches("typedef const int T;", - typedefDecl(hasType(asString("int"))))); - EXPECT_TRUE(matches("typedef int foo; typedef foo bar;", - typedefDecl(hasType(asString("foo")), hasName("bar")))); -} - TEST(HasTypeLoc, MatchesDeclaratorDecls) { EXPECT_TRUE(matches("int x;", varDecl(hasName("x"), hasTypeLoc(loc(asString("int")))))); @@ -1573,9 +1563,6 @@ TEST(Function, MatchesFunctionDeclarations) { functionDecl(isVariadic()))); EXPECT_TRUE(notMatches("void f();", functionDecl(isVariadic()))); EXPECT_TRUE(notMatchesC("void f();", functionDecl(isVariadic()))); - EXPECT_TRUE(matches("void f(...);", functionDecl(parameterCountIs(0)))); - EXPECT_TRUE(matchesC("void f();", functionDecl(parameterCountIs(0)))); - EXPECT_TRUE(matches("void f(int, ...);", functionDecl(parameterCountIs(1)))); } TEST(FunctionTemplate, MatchesFunctionTemplateDeclarations) { @@ -1732,7 +1719,6 @@ TEST(Matcher, ParameterCount) { EXPECT_TRUE(matches("class X { void f(int i) {} };", Function1Arg)); EXPECT_TRUE(notMatches("void f() {}", Function1Arg)); EXPECT_TRUE(notMatches("void f(int i, int j, int k) {}", Function1Arg)); - EXPECT_TRUE(matches("void f(int i, ...) {};", Function1Arg)); } TEST(Matcher, References) { @@ -4461,15 +4447,6 @@ TEST(TypeMatching, MatchesFunctionTypes) { EXPECT_TRUE(matches("void f(int i) {}", functionType())); } -TEST(TypeMatching, MatchesFunctionProtoTypes) { - EXPECT_TRUE(matches("int (*f)(int);", functionProtoType())); - EXPECT_TRUE(matches("void f(int i);", functionProtoType())); - EXPECT_TRUE(matches("void f();", functionProtoType(parameterCountIs(0)))); - EXPECT_TRUE(notMatchesC("void f();", functionProtoType())); - EXPECT_TRUE( - matchesC("void f(void);", functionProtoType(parameterCountIs(0)))); -} - TEST(TypeMatching, MatchesParenType) { EXPECT_TRUE( matches("int (*array)[4];", varDecl(hasType(pointsTo(parenType()))))); @@ -5171,8 +5148,7 @@ TEST(IsInlineMatcher, IsInline) { namespaceDecl(isInline(), hasName("m")))); } -// FIXME: Figure out how to specify paths so the following tests pass on -// Windows. +// FIXME: Figure out how to specify paths so the following tests pass on Windows. #ifndef LLVM_ON_WIN32 TEST(Matcher, IsExpansionInMainFileMatcher) { -- 2.50.1