Index: docs/LibASTMatchersReference.html =================================================================== --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -2403,22 +2403,6 @@ -
Matches functions that have a dynamic exception specification. - -Given: - void f(); - void g() noexcept; - void h() noexcept(true); - void i() noexcept(false); - void j() throw(); - void k() throw(int); - void l() throw(...); -functionDecl(hasDynamicExceptionSpec()) - matches the declarations of j, k, and l, but not f, g, h, or i. -
Matches overloaded operator names. @@ -2616,6 +2600,22 @@
Matches functions that have a dynamic exception specification. + +Given: + void f(); + void g() noexcept; + void h() noexcept(true); + void i() noexcept(false); + void j() throw(); + void k() throw(int); + void l() throw(...); +functionType(hasDynamicExceptionSpec()) + matches the declarations of j, k, and l, but not f, g, h, or i. +
Matches literals that are equal to the given value. Index: include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -3245,10 +3245,10 @@ /// void k() throw(int); /// void l() throw(...); /// \endcode -/// functionDecl(hasDynamicExceptionSpec()) +/// functionType(hasDynamicExceptionSpec()) /// matches the declarations of j, k, and l, but not f, g, h, or i. -AST_MATCHER(FunctionDecl, hasDynamicExceptionSpec) { - if (const auto *FnTy = Node.getType()->getAs()) +AST_MATCHER(FunctionType, hasDynamicExceptionSpec) { + if (const auto *FnTy = dyn_cast (&Node)) return FnTy->hasDynamicExceptionSpec(); return false; } Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp =================================================================== --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1383,19 +1383,19 @@ } TEST(hasDynamicExceptionSpec, MatchesDynamicExceptionSpecifications) { - EXPECT_TRUE(notMatches("void f();", functionDecl(hasDynamicExceptionSpec()))); + EXPECT_TRUE(notMatches("void f();", functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE(notMatches("void g() noexcept;", - functionDecl(hasDynamicExceptionSpec()))); + functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE(notMatches("void h() noexcept(true);", - functionDecl(hasDynamicExceptionSpec()))); + functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE(notMatches("void i() noexcept(false);", - functionDecl(hasDynamicExceptionSpec()))); + functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE( - matches("void j() throw();", functionDecl(hasDynamicExceptionSpec()))); + matches("void j() throw();", functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE( - matches("void k() throw(int);", functionDecl(hasDynamicExceptionSpec()))); + matches("void k() throw(int);", functionType(hasDynamicExceptionSpec()))); EXPECT_TRUE( - matches("void l() throw(...);", functionDecl(hasDynamicExceptionSpec()))); + matches("void l() throw(...);", functionType(hasDynamicExceptionSpec()))); } TEST(HasObjectExpression, DoesNotMatchMember) {