malcolm.parsons created this revision. Herald added subscribers: cfe-commits, xazax.hun, klimek.
The readability-else-after-return check was not warning about an else after a throw of an exception that had arguments that needed to be cleaned up. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D40505 Files: clang-tidy/readability/ElseAfterReturnCheck.cpp test/clang-tidy/readability-else-after-return.cpp Index: test/clang-tidy/readability-else-after-return.cpp =================================================================== --- test/clang-tidy/readability-else-after-return.cpp +++ test/clang-tidy/readability-else-after-return.cpp @@ -1,5 +1,16 @@ // RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -std=c++11 -fexceptions +namespace std { +struct string { + string(const char *); + ~string(); + }; +} + +struct my_exception { + my_exception(const std::string &s); +}; + void f(int a) { if (a > 0) return; @@ -85,5 +96,12 @@ // CHECK-FIXES: {{^}} } // comment-9 x++; } + if (x) { + throw my_exception("foo"); + } else { // comment-10 + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' + // CHECK-FIXES: {{^}} } // comment-10 + x++; + } } } Index: clang-tidy/readability/ElseAfterReturnCheck.cpp =================================================================== --- clang-tidy/readability/ElseAfterReturnCheck.cpp +++ clang-tidy/readability/ElseAfterReturnCheck.cpp @@ -21,7 +21,8 @@ void ElseAfterReturnCheck::registerMatchers(MatchFinder *Finder) { const auto ControlFlowInterruptorMatcher = stmt(anyOf(returnStmt().bind("return"), continueStmt().bind("continue"), - breakStmt().bind("break"), cxxThrowExpr().bind("throw"))); + breakStmt().bind("break"), + expr(ignoringImplicit(cxxThrowExpr().bind("throw"))))); Finder->addMatcher( compoundStmt(forEach( ifStmt(hasThen(stmt(
Index: test/clang-tidy/readability-else-after-return.cpp =================================================================== --- test/clang-tidy/readability-else-after-return.cpp +++ test/clang-tidy/readability-else-after-return.cpp @@ -1,5 +1,16 @@ // RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -std=c++11 -fexceptions +namespace std { +struct string { + string(const char *); + ~string(); + }; +} + +struct my_exception { + my_exception(const std::string &s); +}; + void f(int a) { if (a > 0) return; @@ -85,5 +96,12 @@ // CHECK-FIXES: {{^}} } // comment-9 x++; } + if (x) { + throw my_exception("foo"); + } else { // comment-10 + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' + // CHECK-FIXES: {{^}} } // comment-10 + x++; + } } } Index: clang-tidy/readability/ElseAfterReturnCheck.cpp =================================================================== --- clang-tidy/readability/ElseAfterReturnCheck.cpp +++ clang-tidy/readability/ElseAfterReturnCheck.cpp @@ -21,7 +21,8 @@ void ElseAfterReturnCheck::registerMatchers(MatchFinder *Finder) { const auto ControlFlowInterruptorMatcher = stmt(anyOf(returnStmt().bind("return"), continueStmt().bind("continue"), - breakStmt().bind("break"), cxxThrowExpr().bind("throw"))); + breakStmt().bind("break"), + expr(ignoringImplicit(cxxThrowExpr().bind("throw"))))); Finder->addMatcher( compoundStmt(forEach( ifStmt(hasThen(stmt(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits