[clang] [LifetimeSafety] Add UseFacts for function arguments and assignment RHS (PR #180446)

Gábor Horváth via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 9 07:07:49 PST 2026


================
@@ -366,6 +366,7 @@ void FactsGenerator::VisitBinaryOperator(const BinaryOperator *BO) {
   // result should have the same loans as the pointer operand.
   if (BO->isCompoundAssignmentOp())
     return;
+  handleUse(BO->getRHS());
----------------
Xazax-hun wrote:

I wonder if we need to generalize this. I think there are two ways for us to consider an lvalue to be used:
1. The lvalue is passed to a function. You are already dealing with this in `handleFunctionCall`
2. We convert an lvalue to an rvalue.

I think what you added here is a special case of `2`, and I wonder if we actually want to emit a use for each LValue to RValue conversion to avoid false positives.

That might also mean that we do not actually need to emit a use for DeclRefExprs anymore? 

So e.g.:
```
int &r = a;
```

Here `a` is not used if `r` is not used. 

Similarly:
```
 int *p = &foo  + 3;
```

Here, `foo` is not really used unless we dereference `p`.

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


More information about the cfe-commits mailing list