[clang] [Lifetime Safety] Highlight lifetimebound calls in alias chain diagnostics (PR #206337)

via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 13 03:29:26 PDT 2026


================
@@ -664,20 +664,66 @@ class LifetimeSafetySemaHelperImpl : public LifetimeSafetySemaHelper {
     return CurrExpr->getSourceRange() != LastExpr->getSourceRange();
   }
 
+  bool shouldCarryHiddenLifetimeBound(const Expr *HiddenExpr,
----------------
iitianpushkar wrote:

AST dump for `pp = Pointer(p)`:

```cpp
|-ExprWithCleanups <line:19:5, col:19> 'Pointer<Pointer<Bar>>' lvalue
| `-CXXOperatorCallExpr <col:5, col:19> 'Pointer<Pointer<Bar>>' lvalue '='
|   |-DeclRefExpr <col:5> 'Pointer<Pointer<Bar>>' lvalue Var 'pp'
|   `-MaterializeTemporaryExpr <col:10, col:19> 'const Pointer<Pointer<Bar>>' lvalue
|     `-ImplicitCastExpr <col:10, col:19> 'const Pointer<Pointer<Bar>>' <NoOp>
|       `-ImplicitCastExpr <col:10, col:19> 'Pointer<Pointer<Bar>>' <ConstructorConversion>
|         `-CXXConstructExpr <col:10, col:19> 'Pointer<Pointer<Bar>>' 'void (const Pointer<Bar> &)'
|           `-MaterializeTemporaryExpr <col:10, col:19> 'const Pointer<Bar>' lvalue
|             `-ImplicitCastExpr <col:10, col:19> 'const Pointer<Bar>' <NoOp>
|               `-CXXFunctionalCastExpr <col:10, col:19> 'Pointer<Bar>' functional cast to Pointer <ConstructorConversion>
|                 `-CXXConstructExpr <col:10, col:19> 'Pointer<Bar>' 'void (const Pointer<Bar> &)'
|                   `-ImplicitCastExpr <col:18> 'const Pointer<Bar>' lvalue <NoOp>
|                     `-DeclRefExpr <col:18> 'Pointer<Bar>' lvalue Var 'p'
```
The two expressions I was referring to are both visible here:
```cpp
HiddenExpr: CXXConstructExpr <col:10, col:19> ...  // corresponds to Pointer(p)
LastExpr:   DeclRefExpr <col:18> ...  // corresponds to argument p
```

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


More information about the cfe-commits mailing list