[clang] [Clang] enhance loop analysis to handle variable changes inside lambdas (PR #135573)

Oleksandr T. via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 18 08:37:32 PDT 2025


================
@@ -299,3 +299,38 @@ void test10() {
   for (auto[i, j, k] = arr; i < a; ++i) { }
   for (auto[i, j, k] = arr; i < a; ++arr[0]) { }
 };
+
+namespace GH132038 {
+extern void foo(int);
+void test1() {
+  int a = 0;
+  auto incr_a = [&a]() { ++a; };
+
+  for (int b = 10; a <= b; incr_a())
+    foo(a);
+
+  for (int b = 10; a <= b;)
+    incr_a();
+
+  for (int b = 10; a <= b; [&a]() { ++a; }()) { }
+  for (int b = 10; a <= b; [&a]() { }()) { }
----------------
a-tarasyuk wrote:

@zyn0217 I've added a test case with a FIXME. The original test already briefly mentions cases involving dereferencing...

https://github.com/llvm/llvm-project/blob/db0f754c5af8e6c96770533520bf8b17fc0dc977/clang/test/SemaCXX/warn-loop-analysis.cpp#L40-L41 

> rewritten using dataflow analysis

I suppose it’s better to rely on dataflow analysis when handling more complex cases...

https://github.com/llvm/llvm-project/pull/135573


More information about the cfe-commits mailing list