[clang] [LifetimeSafety] Flow origins from lifetimebound args in `gsl::Pointer` construction (PR #189907)
Gábor Horváth via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 1 04:56:41 PDT 2026
================
@@ -704,10 +704,10 @@ void FactsGenerator::handleFunctionCall(const Expr *Call,
assert(!Args[I]->isGLValue() || ArgList->getLength() >= 2);
ArgList = getRValueOrigins(Args[I], ArgList);
}
- if (isGslOwnerType(Args[I]->getType())) {
- // The constructed gsl::Pointer borrows from the Owner's storage, not
- // from what the Owner itself borrows, so only the outermost origin is
- // needed.
+ if (isGslOwnerType(Args[I]->getType()) || IsArgLifetimeBound(I)) {
+ // The constructed gsl::Pointer is dependent on the argument itself, not
----------------
Xazax-hun wrote:
Another case that you could give a try to:
```
void test2() {
Span<int**> s;
int *p;
int **pp;
{
int i;
p = &I;
pp = &p;
s = Span(pp);
}
use(**s);
}
```
https://github.com/llvm/llvm-project/pull/189907
More information about the cfe-commits
mailing list