[clang] [LifetimeSafety] Add support for `new`/`delete` (PR #192504)
Utkarsh Saxena via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 19 05:20:30 PDT 2026
================
@@ -2663,6 +2663,259 @@ int *noreturn_dead_nested(bool cond, bool cond2, int *num) {
} // namespace conditional_operator_control_flow
+namespace heap_allocation {
+
+//===----------------------------------------------------------------------===//
+// new
+//===----------------------------------------------------------------------===//
+
+void new_view_from_dead_scope() {
+ View *p;
+ {
+ MyObj obj;
+ p = new View(obj); // expected-warning {{object whose reference is captured does not live long enough}}
+ } // expected-note {{destroyed here}}
+ p->use(); // expected-note {{later used here}}
+}
+
+void new_int_basic() {
+ int *p = new int; // expected-warning {{allocated object does not live long enough}}
+ delete p; // expected-note {{freed here}}
+ (void)*p; // expected-note {{later used here}}
+}
+
----------------
usx95 wrote:
Test idea:
```cpp
struct MultiView {
MultiView(MyObj& a [[clang::lifetimebound]], MyObj& b [[clang::lifetimebound]]);
};
void new_multiview_from_mixed_scope() {
MyObj obj1;
MultiView *p;
{
MyObj obj2;
p = new MultiView(obj1, obj2); // Should warn about obj2.
}
(void)p;
}
```
https://github.com/llvm/llvm-project/pull/192504
More information about the cfe-commits
mailing list