================
@@ -1420,9 +1446,18 @@ static void checkExprLifetimeImpl(Sema &SemaRef,
              ? IndirectLocalPathEntry::LifetimeBoundCall
              : IndirectLocalPathEntry::GslPointerAssignment,
          Init});
+  } else if (LK == LK_LifetimeCapture) {
+    Path.push_back({IndirectLocalPathEntry::LifetimeCapture, Init});
+    if (isRecordWithAttr<PointerAttr>(Init->getType()))
----------------
hokein wrote:

 Some interesting cases to consider:

```cpp
void capture1(std::string_view s [[clang::lifetime_capture_by(x)]], 
vector<std::string_view>& x);

// Intended to capture the "string_view" itself
void capture2_1(const std::string_view& s [[clang::lifetime_capture_by(x)]], 
vector<std::string_view*>& x);
// Intended to capture the pointee of the "string_view"
void capture2_2(const std::string_view& s [[clang::lifetime_capture_by(x)]], 
vector<std::string_view>& x);

void test1() {
   capture1(std::string(), x1); // should warn
   capture1(std::string_view(), x1); // should not warn
  
   capture2_1(std::string_view(), x2); // expected to warn
   capture2_1(std::string(), x2); // expected to warn
   
   capture2_2(std::string_view(), x3); // ?? should probably not warn
   capture2_2(std::string(), x3); // expected to warn
}
```

If I understand correctly, the current implementation handles the `capture1` 
case appropriately. However, for the `capture2` cases, it treats them similarly 
to `capture2_2`, which appears inconsistent with the `lifetime_capture_by` 
[documentation](https://clang.llvm.org/docs/AttributeReference.html#lifetime-capture-by).
 According to the documentation, for a reference type, we should consider the 
referenced type (`std::string_view` itself in this case).

Furthermore, the implementation seem to rely on the `gsl::pointer` annotation, 
the documentation does not mention GSL pointer types. E.g.

```cpp
// `my_view` is not annotated with gsl pointer.
void capture3(my_view s [[clang::lifetime_capture_by(x)]], vector<my_view>& x);
```

In this situation, I think no diagnostic should be triggered, this means that 
we might need to update the documentation accordingly.

https://github.com/llvm/llvm-project/pull/115921
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to