Index: docs/LibASTMatchersReference.html =================================================================== --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3493,6 +3493,17 @@ +Matcher<VarDecl>isStaticDataMember +
Matches a variable declaration that is a static data member.
+
+Example matches x (matcher = varDecl(isStaticDataMember())
+class A {
+ static int x;
+ int y;
+};
+
+ + Matcher<VarDecl>isStaticStorageClass
Matches variablefunction declarations that have "static" storage
 class specifier ("static" keyword) written in the source.
Index: include/clang/ASTMatchers/ASTMatchers.h
===================================================================
--- include/clang/ASTMatchers/ASTMatchers.h
+++ include/clang/ASTMatchers/ASTMatchers.h
@@ -2993,6 +2993,19 @@
   return Node.isExceptionVariable();
 }
 
+/// \brief Matches a variable declaration that is a static data member.
+///
+/// Example matches x (matcher = varDecl(isStaticDataMember())
+/// \code
+/// class A {
+///  static int x;
+///  int y;
+/// };
+/// \endcode
+AST_MATCHER(VarDecl, isStaticDataMember) {
+  return Node.isStaticDataMember();
+}
+
 /// \brief Checks that a call expression or a constructor call expression has
 /// a specific number of arguments (including absent default arguments).
 ///
Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
===================================================================
--- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
+++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
@@ -692,6 +692,15 @@
   EXPECT_TRUE(notMatches(T, varDecl(hasName("a"), hasThreadStorageDuration())));
 }
 
+TEST(Matcher, VarDecl_StaticDataMember) {
+  EXPECT_TRUE(matches(
+    "class A {static int x; int y;};",
+    varDecl(hasName("x"), isStaticDataMember())));
+  EXPECT_TRUE(notMatches(
+    "class A {int x;};",
+    varDecl(isStaticDataMember())));
+}
+
 TEST(Matcher, FindsVarDeclInFunctionParameter) {
   EXPECT_TRUE(matches(
     "void f(int i) {}",