[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 05:33:54 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:

So if you want to debug what is going on, I'd recommend you dumping the flow facts. There are some tests doing that. So you can get some ideas how to do this by looking at the tests. 

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


More information about the cfe-commits mailing list