// RUN: %check_clang_tidy %s readability-simplify-boolean-expr %t bool switch_stmt(int i, int j, bool b) { switch (i) { case 0: if (b == true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} case 1: if (b == false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(!b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} case 2: if (b && true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} case 3: if (b && false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(false\)}} // CHECK-FIXES-NEXT: {{j = -20;}} case 4: if (b || true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(true\)}} // CHECK-FIXES-NEXT: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} case 5: if (b || false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} case 6: return i > 0 ? true : false; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i > 0;}} case 7: return i > 0 ? false : true; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i <= 0;}} case 8: if (true) j = 10; else j = -20; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;$}} // CHECK-FIXES-NEXT: {{break;$}} case 9: if (false) j = -20; else j = 10; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} case 10: if (j > 10) return true; else return false; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j > 10;}} case 11: if (j > 10) return false; else return true; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j <= 10;}} case 12: if (j > 10) b = true; else b = false; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j > 10;}} // CHECK-FIXES-NEXT: {{return b;}} case 13: if (j > 10) b = false; else b = true; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j <= 10;}} // CHECK-FIXES-NEXT: {{return b;}} case 14: if (j > 10) return true; return false; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // FIXES: {{return j > 10;}} case 15: if (j > 10) return false; return true; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // FIXES: {{return j <= 10;}} case 16: if (j > 10) return true; return true; return false; case 17: if (j > 10) return false; return false; return true; case 100: { if (b == true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} } case 101: { if (b == false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(!b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } case 102: { if (b && true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} } case 103: { if (b && false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(false\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } case 104: { if (b || true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(true\)}} // CHECK-FIXES-NEXT: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} } case 105: { if (b || false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } case 106: { return i > 0 ? true : false; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i > 0;}} } case 107: { return i > 0 ? false : true; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i <= 0;}} } case 108: { if (true) j = 10; else j = -20; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;$}} // CHECK-FIXES-NEXT: {{break;$}} } case 109: { if (false) j = -20; else j = 10; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} } case 110: { if (j > 10) return true; else return false; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j > 10;}} } case 111: { if (j > 10) return false; else return true; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j <= 10;}} } case 112: { if (j > 10) b = true; else b = false; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j > 10;}} // CHECK-FIXES-NEXT: {{return b;}} } case 113: { if (j > 10) b = false; else b = true; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j <= 10;}} // CHECK-FIXES-NEXT: {{return b;}} } case 114: { if (j > 10) return true; return false; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // CHECK-FIXES: {{return j > 10;}} } case 115: { if (j > 10) return false; return true; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // CHECK-FIXES: {{return j <= 10;}} } case 116: { return false; if (j > 10) return true; } case 117: { return true; if (j > 10) return false; } } return j > 0; } bool default_stmt0(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b == true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} } return false; } bool default_stmt1(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b == false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(!b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } return false; } bool default_stmt2(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b && true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} } return false; } bool default_stmt3(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b && false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(false\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } return false; } bool default_stmt4(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b || true) j = 10; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(true\)}} // CHECK-FIXES-NEXT: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} } return false; } bool default_stmt5(int i, int j, bool b) { switch (i) { case 0: return true; default: if (b || false) j = -20; break; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} } return false; } bool default_stmt6(int i, int j, bool b) { switch (i) { case 0: return true; default: return i > 0 ? true : false; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i > 0;}} } return false; } bool default_stmt7(int i, int j, bool b) { switch (i) { case 0: return true; default: return i > 0 ? false : true; // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i <= 0;}} } return false; } bool default_stmt8(int i, int j, bool b) { switch (i) { case 0: return true; default: if (true) j = 10; else j = -20; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;$}} // CHECK-FIXES-NEXT: {{break;$}} } return false; } bool default_stmt9(int i, int j, bool b) { switch (i) { case 0: return true; default: if (false) j = -20; else j = 10; break; // CHECK-MESSAGES: :[[@LINE-5]]:9: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;}} // CHECK-FIXES-NEXT: {{break;}} } return false; } bool default_stmt10(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) return true; else return false; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j > 10;}} } return false; } bool default_stmt11(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) return false; else return true; // CHECK-MESSAGES: :[[@LINE-3]]:14: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j <= 10;}} } return false; } bool default_stmt12(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) b = true; else b = false; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j > 10;}} // CHECK-FIXES-NEXT: {{return b;}} } return false; } bool default_stmt13(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) b = false; else b = true; return b; // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j <= 10;}} // CHECK-FIXES-NEXT: {{return b;}} } return false; } bool default_stmt14(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) return true; return false; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // FIXES: {{return j > 10;}} } return false; } bool default_stmt15(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) return false; return true; // CHECK-MESSAGES: :[[@LINE-2]]:14: warning: {{.*}} in conditional return // FIXES: {{return j <= 10;}} } return false; } bool default_stmt16(int i, int j, bool b) { switch (i) { case 0: return false; default: if (j > 10) return true; } return false; } bool default_stmt17(int i, int j, bool b) { switch (i) { case 0: return true; default: if (j > 10) return false; } return false; } bool label_stmt0(int i, int j, bool b) { label: if (b == true) j = 10; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} return false; } bool label_stmt1(int i, int j, bool b) { label: if (b == false) j = -20; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(!b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} return false; } bool label_stmt2(int i, int j, bool b) { label: if (b && true) j = 10; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = 10;}} return false; } bool label_stmt3(int i, int j, bool b) { label: if (b && false) j = -20; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(false\)}} // CHECK-FIXES-NEXT: {{j = -20;}} return false; } bool label_stmt4(int i, int j, bool b) { label: if (b || true) j = 10; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(true\)}} // CHECK-FIXES-NEXT: {{j = 10;}} return false; } bool label_stmt5(int i, int j, bool b) { label: if (b || false) j = -20; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} to boolean operator // CHECK-FIXES: {{if \(b\)}} // CHECK-FIXES-NEXT: {{j = -20;}} return false; } bool label_stmt6(int i, int j, bool b) { label: return i > 0 ? true : false; // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i > 0;}} } bool label_stmt7(int i, int j, bool b) { label: return i > 0 ? false : true; // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: {{.*}} in ternary expression result // CHECK-FIXES: {{return i <= 0;}} } bool label_stmt8(int i, int j, bool b) { label: if (true) j = 10; else j = -20; // CHECK-MESSAGES: :[[@LINE-4]]:7: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;$}} return false; } bool label_stmt9(int i, int j, bool b) { label: if (false) j = -20; else j = 10; // CHECK-MESSAGES: :[[@LINE-4]]:7: warning: {{.*}} in if statement condition // CHECK-FIXES: {{j = 10;}} return false; } bool label_stmt10(int i, int j, bool b) { label: if (j > 10) return true; else return false; // CHECK-MESSAGES: :[[@LINE-3]]:12: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j > 10;}} } bool label_stmt11(int i, int j, bool b) { label: if (j > 10) return false; else return true; // CHECK-MESSAGES: :[[@LINE-3]]:12: warning: {{.*}} in conditional return statement // CHECK-FIXES: {{return j <= 10;}} } bool label_stmt12(int i, int j, bool b) { label: if (j > 10) b = true; else b = false; return b; // CHECK-MESSAGES: :[[@LINE-4]]:9: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j > 10;}} // CHECK-FIXES-NEXT: {{return b;}} } bool label_stmt13(int i, int j, bool b) { label: if (j > 10) b = false; else b = true; return b; // CHECK-MESSAGES: :[[@LINE-4]]:9: warning: {{.*}} in conditional assignment // CHECK-FIXES: {{b = j <= 10;}} // CHECK-FIXES-NEXT: {{return b;}} } bool label_stmt14(int i, int j, bool b) { label: if (j > 10) return true; return false; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} in conditional return // FIXES: {{return j > 10;}} } bool label_stmt15(int i, int j, bool b) { label: if (j > 10) return false; return true; // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: {{.*}} in conditional return // FIXES: {{return j <= 10;}} }