Author: malcolm.parsons Date: Fri Nov 4 11:32:14 2016 New Revision: 285999
URL: http://llvm.org/viewvc/llvm-project?rev=285999&view=rev Log: [clang-tidy] Fixed readability-else-after-return for cascade statements Summary: Fix generated by this check changed program semantics in the case where 'if' was a part (direct child) of other statement. Fixes PR30652. Patch by Paweł Żukowski. Reviewers: malcolm.parsons, alexfh, djasper Subscribers: mgehre, omtcyfz, cfe-commits Differential Revision: https://reviews.llvm.org/D26125 Modified: clang-tools-extra/trunk/clang-tidy/readability/ElseAfterReturnCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-else-after-return.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/ElseAfterReturnCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ElseAfterReturnCheck.cpp?rev=285999&r1=285998&r2=285999&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ElseAfterReturnCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ElseAfterReturnCheck.cpp Fri Nov 4 11:32:14 2016 @@ -23,7 +23,7 @@ void ElseAfterReturnCheck::registerMatch stmt(anyOf(returnStmt().bind("return"), continueStmt().bind("continue"), breakStmt().bind("break"), cxxThrowExpr().bind("throw"))); Finder->addMatcher( - stmt(forEach( + compoundStmt(forEach( ifStmt(hasThen(stmt( anyOf(ControlFlowInterruptorMatcher, compoundStmt(has(ControlFlowInterruptorMatcher))))), Modified: clang-tools-extra/trunk/test/clang-tidy/readability-else-after-return.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-else-after-return.cpp?rev=285999&r1=285998&r2=285999&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-else-after-return.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-else-after-return.cpp Fri Nov 4 11:32:14 2016 @@ -29,32 +29,60 @@ void f(int a) { else if (a > 10) return; else // comment-2 - // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'else' after 'return' - // CHECK-FIXES: {{^}} // comment-2 + // CHECK-FIXES-NOT: {{^}} // comment-2 f(0); + + if (a > 0) + if (a < 10) + return; + else // comment-3 + // CHECK-FIXES-NOT: {{^}} // comment-3 + f(0); + else + if (a > 10) + return; + else // comment-4 + // CHECK-FIXES-NOT: {{^}} // comment-4 + f(0); + + if (a > 0) { + if (a < 10) + return; + else // comment-5 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-5 + f(0); + } else { + if (a > 10) + return; + else // comment-6 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-6 + f(0); + } } void foo() { for (unsigned x = 0; x < 42; ++x) { if (x) { continue; - } else { // comment-3 + } else { // comment-7 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'continue' - // CHECK-FIXES: {{^}} } // comment-3 + // CHECK-FIXES: {{^}} } // comment-7 x++; } if (x) { break; - } else { // comment-4 + } else { // comment-8 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'break' - // CHECK-FIXES: {{^}} } // comment-4 + // CHECK-FIXES: {{^}} } // comment-8 x++; } if (x) { throw 42; - } else { // comment-5 + } else { // comment-9 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' - // CHECK-FIXES: {{^}} } // comment-5 + // CHECK-FIXES: {{^}} } // comment-9 x++; } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits