================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to