================
@@ -688,9 +707,9 @@ void FactsGenerator::handleFunctionCall(const Expr *Call,
         ArgList = getRValueOrigins(Args[I], ArgList);
       }
       if (isGslOwnerType(Args[I]->getType())) {
-        // GSL construction creates a view that borrows from arguments.
-        // This implies flowing origins through the list structure.
-        flow(CallList, ArgList, KillSrc);
+        CurrentBlockFacts.push_back(FactMgr.createFact<OriginFlowFact>(
----------------
usx95 wrote:

\+1 to add documentation for this. I believe the reason is that owners can now 
also have origins associated and the origin list would not match for l-value 
owner expression.

`std::unique_ptr\<S> foo(const int& I [[lifetimebound]])`

This was previously added as test in this PR

```cpp
MyObj getMyObj(const MyObj &obj [[clang::lifetimebound]]);
void gsl_owner_return_does_not_crash() {
  MyObj obj;
  View v = obj;
  getMyObj(obj);

  use(v);
}
```

I guess a better example is

```cpp
std::vector<std::string_view> create(const std::string& str 
[[clang::lifetimebound]]);

std::span<std::string_view> foo() {
  std::string local = "local";
  auto views = create(local);
  return views;
}
```



https://github.com/llvm/llvm-project/pull/187917
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to