https://github.com/Abhay13332 created
https://github.com/llvm/llvm-project/pull/230846
Fixes #230601
This PR addresses the false-negative scenario where
`bugprone-redundant-branch-condition` fails to trigger on simple two-variable
logical conjunction expressions (e.g., `if (x && y) { if (y) ... }`).
Note: This is a partial fix. As noted in the code's `// FIXME` comments,
handling longer conjunctive and disjunctive chain clauses (3 or more variables)
requires further extension is not yet touched.
>From 6463170b54e1022bddefdbf040869e3e8cf9f711 Mon Sep 17 00:00:00 2001
From: abhay13332 <[email protected]>
Date: Sun, 11 Oct 2026 01:09:35 +0530
Subject: [PATCH] [clang-tidy] Fix false negative for binary logical
expressions for two operands in bugprone-redundant-branch-condition
---
.../bugprone/RedundantBranchConditionCheck.cpp | 7 +++----
.../bugprone/redundant-branch-condition.cpp | 17 +++++++++++++++--
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
b/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
index 8d608dd4b0e66..f6c6373969b34 100644
--- a/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
@@ -76,10 +76,9 @@ void
RedundantBranchConditionCheck::registerMatchers(MatchFinder *Finder) {
ifStmt(
hasCondition(anyOf(
declRefExpr(hasDeclaration(ImmutableVar)).bind(OuterIfVar1Str),
- binaryOperator(
- hasOperatorName("&&"),
- hasEitherOperand(declRefExpr(hasDeclaration(ImmutableVar))
- .bind(OuterIfVar2Str))))),
+ binaryOperator(hasOperatorName("&&"),
+ forEach((declRefExpr(hasDeclaration(ImmutableVar))
+ .bind(OuterIfVar2Str)))))),
hasThen(hasDescendant(
ifStmt(hasCondition(anyOf(
declRefExpr(hasDeclaration(
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/bugprone/redundant-branch-condition.cpp
b/clang-tools-extra/test/clang-tidy/checkers/bugprone/redundant-branch-condition.cpp
index ad2238ff9984f..1111c27ef01f4 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/bugprone/redundant-branch-condition.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/bugprone/redundant-branch-condition.cpp
@@ -12,7 +12,7 @@ bool tryToExtinguishByVal(bool);
void tryPutFireOut();
bool callTheFD();
void scream();
-
+bool isFireFighterComing();
bool someOtherCondition();
//===--- Basic Positives
--------------------------------------------------===//
@@ -278,13 +278,26 @@ void positive_direct_outer_and_rhs() {
// CHECK-FIXES: {{^\ *$}}
}
}
+void positive_direct_outer_and_rhs_bool() {
+ bool onFire = isBurning();
+ bool isComing = isFireFighterComing();
+ if (isComing && onFire) {
+ if (onFire) {
+ // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: redundant condition 'onFire'
[bugprone-redundant-branch-condition]
+ // CHECK-FIXES: {{^\ *$}}
+ scream();
+ }
+ // CHECK-FIXES: {{^\ *$}}
+ }
+}
+
void positive_indirect_outer_and_rhs() {
bool onFire = isBurning();
if (fireFighters < 10 && onFire) {
if (someOtherCondition()) {
if (onFire) {
- // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant condition
'onFire' [bugprone-redundant-branch-condition]
+ // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant condition
'onFire' [bugprone-redundant-branch-condition]
// CHECK-FIXES: {{^\ *$}}
scream();
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits