[clang-tools-extra] 71263dc - [clang-tidy] Fix bugprone-inc-dec-in-conditions FP with lambda condition (#189145)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 28 23:11:33 PDT 2026
Author: Baranov Victor
Date: 2026-03-29T09:11:28+03:00
New Revision: 71263dc615cd6ece304e4326485336691c2ddc26
URL: https://github.com/llvm/llvm-project/commit/71263dc615cd6ece304e4326485336691c2ddc26
DIFF: https://github.com/llvm/llvm-project/commit/71263dc615cd6ece304e4326485336691c2ddc26.diff
LOG: [clang-tidy] Fix bugprone-inc-dec-in-conditions FP with lambda condition (#189145)
Fixes https://github.com/llvm/llvm-project/issues/163913.
Added:
Modified:
clang-tools-extra/clang-tidy/bugprone/IncDecInConditionsCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/bugprone/inc-dec-in-conditions.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/bugprone/IncDecInConditionsCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/IncDecInConditionsCheck.cpp
index 9f723d52f60e3..bdb91b1ed0f4d 100644
--- a/clang-tools-extra/clang-tidy/bugprone/IncDecInConditionsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/IncDecInConditionsCheck.cpp
@@ -39,6 +39,9 @@ void IncDecInConditionsCheck::registerMatchers(MatchFinder *Finder) {
expr(anyOf(hasAncestor(expr(matchers::hasUnevaluatedContext())),
hasAncestor(typeLoc())));
+ auto IsInLambda =
+ hasAncestor(lambdaExpr(hasAncestor(expr(equalsBoundNode("parent")))));
+
Finder->addMatcher(
expr(
OperatorMatcher, unless(hasAncestor(OperatorMatcher)),
@@ -50,7 +53,7 @@ void IncDecInConditionsCheck::registerMatchers(MatchFinder *Finder) {
cxxOperatorCallExpr(
isPrePostOperator(),
hasUnaryOperand(expr().bind("operand")))),
- unless(IsInUnevaluatedContext),
+ unless(IsInUnevaluatedContext), unless(IsInLambda),
hasAncestor(
expr(equalsBoundNode("parent"),
hasDescendant(
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 637edaece2a90..eb735e6e62ee4 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -219,6 +219,11 @@ Changes in existing checks
loss in overloads with transparent standard functors (e.g. ``std::plus<>``)
for ``std::accumulate``, ``std::reduce``, and ``std::inner_product``.
+- Improved :doc:`bugprone-inc-dec-in-conditions
+ <clang-tidy/checks/bugprone/inc-dec-in-conditions>` check by fixing a false
+ positive when increment/decrement operators appear inside lambda bodies that
+ are part of a condition expression.
+
- Improved :doc:`bugprone-macro-parentheses
<clang-tidy/checks/bugprone/macro-parentheses>` check by printing the macro
definition in the warning message if the macro is defined on command line.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/inc-dec-in-conditions.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/inc-dec-in-conditions.cpp
index 91de013138f0d..82a36f1dc3e03 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/inc-dec-in-conditions.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/inc-dec-in-conditions.cpp
@@ -78,3 +78,47 @@ namespace PR85838 {
if (static_cast<decltype(++foo)>(bar) < foo) {}
}
}
+
+namespace GH163913 {
+ void lambdaWithIncrement(int size) {
+ if ([](int n) {
+ ++n;
+ return n;
+ }(size) < 42) {}
+ }
+
+ void lambdaWithDecrement(int size) {
+ if ([](int n) {
+ --n;
+ return n;
+ }(size) < 42) {}
+ }
+
+ template <typename Func>
+ auto eval(Func&& fn) -> decltype(fn()) {
+ return fn();
+ }
+
+ void lambdaWithForLoop(int size) {
+ if (eval([&] {
+ int result = 0;
+ for (int i = 0; i < size; i++) {
+ result += i;
+ }
+ return result;
+ }) < 42) {}
+ }
+
+ void outsideLambda(int size) {
+ if ([](int n) {
+ --n;
+ return n;
+ }(size) < ++size) {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: incrementing and referencing a variable in a complex condition
+ if (++size > [](int n) {
+ --n;
+ return n;
+ }(size)) {}
+ // CHECK-MESSAGES: :[[@LINE-4]]:9: warning: incrementing and referencing a variable in a complex condition
+ }
+}
More information about the cfe-commits
mailing list