[clang] [llvm] [clang] Implement lifetime analysis for lifetime_capture_by(X) (PR #115921)
Boaz Brickner via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 18 05:37:58 PST 2024
================
@@ -3922,16 +3922,41 @@ def LifetimeCaptureByDocs : Documentation {
let Category = DocCatFunction;
let Content = [{
Similar to `lifetimebound`_, the ``lifetime_capture_by(X)`` attribute on a function
-parameter or implicit object parameter indicates that that objects that are referred to
-by that parameter may also be referred to by the capturing entity ``X``.
+parameter or implicit object parameter indicates that objects that are referred to by
+that parameter may also be referred to by a capturing entity ``X``.
+
+Below is a list of types of the parameters and what they're considered to refer to:
+
+- A reference param is considered to refer to its referenced object.
+- A pointer param is considered to refer to its pointee.
+- A ``std::initializer_list<T>`` is considered to refer to its underlying array.
+- Aggregates (arrays and simple ``struct``\s) are considered to refer to all
+ objects that their transitive subobjects refer to.
+- View type param (type annotated with ``[[gsl::Pointer()]]``) is considered to refer
+ to its pointee. This holds true even if the view type appears as a reference
+ in the parameter. For example, both ``std::string_view`` and
+ ``const std::string_view &`` are considered to refer to a ``std::string``.
+
+Clang would diagnose when a temporary object is used as an argument to such an
+annotated parameter.
----------------
bricknerb wrote:
Regardless of X ?
How does X impact diagnosis?
https://github.com/llvm/llvm-project/pull/115921
More information about the cfe-commits
mailing list