llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-analysis

@llvm/pr-subscribers-clang-temporal-safety

Author: Utkarsh Saxena (usx95)

<details>
<summary>Changes</summary>

This patch introduces an opt-in `-Wlifetime-safety-field-origin-escape` 
diagnostic in Lifetime Safety to detect non-constructor instance methods whose 
return value depends on the origin of a reference, pointer, or view field 
rather than the lifetime of the enclosing object (`*this`). To support this, 
placeholder loans are issued for origin-carrying fields (`$this.field`) during 
analysis of instance methods, distinguishing between returning a borrow of a 
field's storage (which depends on `*this` and warrants 
`[[clang::lifetimebound]]`) and returning a value derived from a field's origin 
(where the returned reference or view outlives the wrapper object and instead 
depends on the underlying referent).

This diagnostic helps identify wrapper/view methods where 
`[[clang::lifetimebound]]` cannot express the true lifetime contract—annotating 
such methods with `[[clang::lifetimebound]]` would cause false-positive 
use-after-scope warnings when a temporary wrapper is destroyed while its 
underlying referent remains alive, whereas leaving them unannotated risks false 
negatives when both expire. Because a raw pointer field may represent owned 
storage tied to `*this` (e.g., `Vector::data()`) rather than a non-owning 
reference (e.g., `Span::data()`), the warning is suppressed if the method is 
already marked `[[clang::lifetimebound]]`, and an accompanying note suggests 
marking the method `[[clang::lifetimebound]]` when the escaping field is a 
pointer owned by the class.

---
Full diff: https://github.com/llvm/llvm-project/pull/229784.diff


9 Files Affected:

- (modified) 
clang/include/clang/Analysis/Analyses/LifetimeSafety/LifetimeSafety.h (+6) 
- (modified) clang/include/clang/Analysis/Analyses/LifetimeSafety/Loans.h 
(+29-14) 
- (modified) clang/include/clang/Basic/DiagnosticGroups.td (+7) 
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+8) 
- (modified) clang/lib/Analysis/LifetimeSafety/Checker.cpp (+29) 
- (modified) clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp (+13-2) 
- (modified) clang/lib/Analysis/LifetimeSafety/Loans.cpp (+16) 
- (modified) clang/lib/Sema/SemaLifetimeSafety.h (+22) 
- (modified) clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp (+102-3) 


``````````diff
The server is unavailable at this time. Please wait a few minutes before you 
try again.
``````````

</details>


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

Reply via email to