// RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -std=c++11 -fexceptions namespace std { struct string { string(const char *); ~string(); }; } // namespace std struct my_exception { my_exception(const std::string &s); }; void f(int a) { if (a > 0) return; else // comment-0 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'else' after 'return' // CHECK-FIXES: {{^}} // comment-0 return; if (a > 0) { return; } else { // comment-1 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' // CHECK-FIXES: {{^}} } // comment-1 return; } if (a > 0) { f(0); if (a > 10) return; } else { return; } if (a > 0) f(0); else if (a > 10) return; else // 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-7 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'continue' // CHECK-FIXES: {{^}} } // comment-7 x++; } if (x) { break; } else { // comment-8 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'break' // CHECK-FIXES: {{^}} } // comment-8 x++; } if (x) { throw 42; } else { // comment-9 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' // 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++; } } }