Issue 153594
Summary [LifetimeSafety] Track loan expiry for ParmVarDecl
Labels clang:temporal-safety
Assignees
Reporter usx95
    ```cpp
#include <string>

std::string* foo(std::string a) {
    const std::string* p = &a;
    return p;
}
```

https://godbolt.org/z/TM3G719a4

There is no expire fact generated for `a`.

Debug output:
```
[B2 (ENTRY)]
   Succs (1): B1
 [B1]
   1: a
   2: &[B1.1]
   3: [B1.2] (ImplicitCastExpr, NoOp, const std::string *)
   4: const std::string *p = &a;
   5: p
   6: [B1.5] (ImplicitCastExpr, LValueToRValue, const std::string *)
   7: return [B1.6];
   Preds (1): B2
   Succs (1): B0
 [B0 (EXIT)]
   Preds (1): B1

==========================================
       Lifetime Analysis Facts:
==========================================
Function: foo
  Block B2:
  End of Block
  Block B1:
    Issue (LoanID: 0, OriginID: 0)
 Issue (LoanID: 1, OriginID: 0)
    AssignOrigin (DestID: 1, SrcID: 0)
 AssignOrigin (DestID: 2, SrcID: 1)
    AssignOrigin (DestID: 3, SrcID: 2)
 ReturnOfOrigin (OriginID: 3)
  End of Block
  Block B0:
  End of Block
Compiler returned: 0
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to