[clang] [LifetimeSafety] Detect use-after-scope through fields in member calls (PR #191731)

Utkarsh Saxena via cfe-commits cfe-commits at lists.llvm.org
Sun Apr 12 23:02:35 PDT 2026


================
@@ -2531,3 +2531,45 @@ int *noreturn_dead_nested(bool cond, bool cond2, int *num) {
 }
 
 } // namespace conditional_operator_control_flow
+
+namespace method_call_uses_field_origins {
+// https://github.com/llvm/llvm-project/issues/182945
+
+int val;
+
+struct S {
+public:
+  int* p_;
+  void bar();
+  void foo() {
+    {
+      int num;
+      this->p_ = # // expected-warning {{object whose reference is captured does not live long enough}}
+    }                  // expected-note {{destroyed here}}
+    bar();             // expected-note {{later used here}}
+    this->p_ = &val;
+  }
+};
+
+struct T {
+public:
+  std::string_view v;
+  void bar();
+  void foo() {
+    v = std::string("tmp"); // expected-warning {{object whose reference is captured does not live long enough}} expected-note {{destroyed here}}
+    bar();                  // expected-note {{later used here}}
+  }
+};
+
+// FIXME: False-positive: the analysis tracks a, but not that it belongs to s1.
----------------
usx95 wrote:

> Is it? I thought false positive is when the warning is expected, but we didn't get any, and false negative is when we did get the warning while it was not expcected

FP in the context of static analysis and specially bug-finding tools (and anomaly detectors in general) is when we reject valid code as invalid. The "positive" is when we issue a diagnostic.

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


More information about the cfe-commits mailing list