[llvm-branch-commits] [clang] [analyzer] Only bind aggregate lifetime sources in LifetimeModeling for annotated functions (PR #214824)

Balázs Benics via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Aug 9 09:06:30 PDT 2026


================
@@ -471,3 +471,35 @@ IntPtrArr return_array_field_not_yet_detected() {
   // expected-note at -2    {{Address of stack memory associated with local variable 'z' returned to caller}}
   // expected-warning at -3 {{address of stack memory associated with local variable 'z' returned}}
 }
+
+struct Hold {
+  int *ptr;
+};
+
+Hold retPtr(int &x) {
+  return Hold{&x};
+}
+// Even though there is a lifetime error in the function
+// UseAfterLifetimeEnd should not emit a warning for this
+// case since there is no annotation present in the code.
+// The warning present in the test comes from core.StackAddressEscape
+// checker.
+Hold return_by_val_no_ann() {
+  int num = 4;
+  return retPtr(num);
+  // expected-warning at -1 {{Address of stack memory associated with local variable 'num' returned to caller}}
+  // expected-note at -2    {{Address of stack memory associated with local variable 'num' returned to caller}}
+}
----------------
steakhal wrote:

I'd probably put something to the return like like:
`// No warning from UseAfterLifetimeEnd`

Do we need the body for `rerPtr`? If we didn't have it, the core.StackAddressEscape would be silent.
If you wanted to stress that those reports come from that checker, you can also match the [core.StackAddressEscape] suffix of the report. That is unconventional enough that it would signal this.

https://github.com/llvm/llvm-project/pull/214824


More information about the llvm-branch-commits mailing list