================ @@ -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