[llvm-branch-commits] [clang] [analyzer] Turn on CFGLifetimeEnds elements by default (PR #228228)

Benedek Kaibas via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Oct 13 02:51:04 PDT 2026


================
@@ -67,21 +67,22 @@ int main() {
 // FIXME: On steps 8 and 14, a decomposition is referred by name, which they never have.
 
 // CHECK-LABEL: int main()
-// CHECK:      [B3]
+// CHECK:      [B4]
----------------
benedekaibas wrote:

  With enabling the lifetime end CFG elements for this case they appear in:
  ```text
   [B1]
     1: [B5.8] (Lifetime ends)
     2: [B5.12] (Lifetime ends)
     3: [B5.4] (Lifetime ends)
     4: [B5.2] (Lifetime ends)
     Preds (1): B2
     Succs (1): B0
  ```
  
  On the current main `[B1]` is:
  ```text
   [B1]
     1: operator!=
     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(__wrap_iter, __wrap_iter))
     3: __begin1
     4: [B1.3] (ImplicitCastExpr, NoOp, const __wrap_iter)
     5: [B1.4] (CXXConstructExpr, [B1.9]+0, __wrap_iter)
     6: __end1
     7: [B1.6] (ImplicitCastExpr, NoOp, const __wrap_iter)
     8: [B1.7] (CXXConstructExpr, [B1.9]+1, __wrap_iter)
     9: [B1.5] != [B1.8] (OperatorCall)
     T: for (auto & [a, b] : [B4.3])
  ```
  
  So the lifetime end elements get their own block essentially and what was `[B1]` becomes `[B2]` and so on.

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


More information about the llvm-branch-commits mailing list