https://github.com/sipher-01 updated https://github.com/llvm/llvm-project/pull/204891
>From ea4213d172b84b0aa9c02a91e0c195e9e35c41f9 Mon Sep 17 00:00:00 2001 From: Sipher <[email protected]> Date: Sat, 20 Jun 2026 02:06:18 +0530 Subject: [PATCH 1/2] [Clang][LifetimeSafety] Add DanglingGlobalMoved to lifetime-safety-strict group lifetime-safety-dangling-global-moved was defined but not included in any parent diagnostic group, meaning -Wlifetime-safety-all and -Wno-lifetime-safety-all had no effect on it. Add it to LifetimeSafetyStrict alongside its sibling -moved warnings. Fixes #204213 --- clang/include/clang/Basic/DiagnosticGroups.td | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 244cd3630bb11..5cdebd35ba05d 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -663,6 +663,7 @@ def LifetimeSafetyStrict : DiagGroup<"lifetime-safety-strict", LifetimeSafetyUseAfterScopeMoved, LifetimeSafetyReturnStackAddrMoved, LifetimeSafetyDanglingFieldMoved, + LifetimeSafetyDanglingGlobalMoved, LifetimeSafetyInvalidation]>; def LifetimeSafety : DiagGroup<"lifetime-safety", >From 99142eb7355196079f0ab51c8f8ff053b2b31f93 Mon Sep 17 00:00:00 2001 From: Sipher <[email protected]> Date: Sun, 21 Jun 2026 00:44:42 +0530 Subject: [PATCH 2/2] [Clang][LifetimeSafety] Add test for dangling-global-moved warning :wq --- clang/test/Sema/LifetimeSafety/dangling-global.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/clang/test/Sema/LifetimeSafety/dangling-global.cpp b/clang/test/Sema/LifetimeSafety/dangling-global.cpp index 8d464b0dbe554..10d9609004482 100644 --- a/clang/test/Sema/LifetimeSafety/dangling-global.cpp +++ b/clang/test/Sema/LifetimeSafety/dangling-global.cpp @@ -1,8 +1,14 @@ -// RUN: %clang_cc1 -fsyntax-only -Wlifetime-safety -Wno-dangling -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wlifetime-safety -Wno-lifetime-safety-dangling-global-moved -Wno-dangling -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wlifetime-safety-dangling-global-moved -Wno-dangling -verify=moved %s + +#include "Inputs/lifetime-analysis.h" int *global; // expected-note 10 {{this global dangles}} int *global_backup; // expected-note {{this global dangles}} +std::string_view global_view; // moved-note {{this global dangles}} +void takeString(std::string&& s); + struct ObjWithStaticField { static int *static_field; // expected-note {{this static storage dangles}} }; @@ -117,3 +123,8 @@ void ok_global_storage() { ++p; global = (p -= 1); // no-warning } +//when a local string is stored in a global view and then moved, the analyzer warns it "may" dangle since the storage may have been moved +void store_local_in_global_but_moved(std::string s){ + global_view = s; // moved-warning-re {{stack memory associated with parameter 's' may escape to the global variable 'global_view' which will dangle{{.*}} may have been moved}} + takeString(std::move(s)); //moved-note {{potentially moved here}} +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
