Index: docs/LibASTMatchersReference.html
===================================================================
--- docs/LibASTMatchersReference.html	(revision 241795)
+++ docs/LibASTMatchersReference.html	(working copy)
@@ -2293,6 +2293,18 @@
 </pre></td></tr>
 
 
+<tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExceptionVar1')"><a name="isExceptionVar1Anchor">isExceptionVar</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isException1"><pre>Matches if a variable declaration is for a C++ catch handler or Objective-C @catch variable.
+
+Example matches x (matcher = varDecl(isExceptionVar())
+  void f(int y) {
+    try {
+    } catch (int x) {
+    }
+  }
+</pre></td></tr>
+
+
 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization1')"><a name="isExplicitTemplateSpecialization1Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
 <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
 static member variable template instantiations.
Index: include/clang/ASTMatchers/ASTMatchers.h
===================================================================
--- include/clang/ASTMatchers/ASTMatchers.h	(revision 241795)
+++ include/clang/ASTMatchers/ASTMatchers.h	(working copy)
@@ -2450,6 +2450,21 @@
   return Node.hasGlobalStorage();
 }
 
+/// \brief Matches a variable declaration that is an exception variable from
+/// a C++ catch block, or an Objective-C \@catch statement.
+///
+/// Example matches x (matcher = varDecl(isExceptionVar())
+/// \code
+/// void f(int y) {
+///   try {
+///   } catch (int x) {
+///   }
+/// }
+/// \endcode
+AST_MATCHER(VarDecl, isExceptionVar) {
+  return Node.isExceptionVariable();
+}
+
 /// \brief Checks that a call expression or a constructor call expression has
 /// a specific number of arguments (including absent default arguments).
 ///
Index: lib/ASTMatchers/Dynamic/Registry.cpp
===================================================================
--- lib/ASTMatchers/Dynamic/Registry.cpp	(revision 241795)
+++ lib/ASTMatchers/Dynamic/Registry.cpp	(working copy)
@@ -245,6 +245,7 @@
   REGISTER_MATCHER(isConstQualified);
   REGISTER_MATCHER(isDefinition);
   REGISTER_MATCHER(isDeleted);
+  REGISTER_MATCHER(isExceptionVar);
   REGISTER_MATCHER(isExplicitTemplateSpecialization);
   REGISTER_MATCHER(isExpr);
   REGISTER_MATCHER(isExternC);
Index: unittests/ASTMatchers/ASTMatchersTest.cpp
===================================================================
--- unittests/ASTMatchers/ASTMatchersTest.cpp	(revision 241795)
+++ unittests/ASTMatchers/ASTMatchersTest.cpp	(working copy)
@@ -3329,6 +3329,10 @@
                       catchStmt(isCatchAll())));
   EXPECT_TRUE(notMatches("void foo() try { throw; } catch(int) { }",
                          catchStmt(isCatchAll())));
+  EXPECT_TRUE(
+      matches("void foo() try {} catch(int X) { }", varDecl(isExceptionVar())));
+  EXPECT_TRUE(notMatches("void foo() try { int X; } catch (...) { }",
+                         varDecl(isExceptionVar())));
 }
 
 TEST(HasConditionVariableStatement, DoesNotMatchCondition) {
