[clang] [LifetimeSafety] Add `LifetimeSafetyDanglingGlobalMoved` to strict diagnostic group (PR #204891)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 22 01:29:31 PDT 2026
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 <sourav2003singhkatoch at gmail.com>
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 0e2a44a7c8605bfae207bcced3fb4ae4104222aa Mon Sep 17 00:00:00 2001
From: Sipher <sourav2003singhkatoch at gmail.com>
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 | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/clang/test/Sema/LifetimeSafety/dangling-global.cpp b/clang/test/Sema/LifetimeSafety/dangling-global.cpp
index 8d464b0dbe554..bd67a0100131f 100644
--- a/clang/test/Sema/LifetimeSafety/dangling-global.cpp
+++ b/clang/test/Sema/LifetimeSafety/dangling-global.cpp
@@ -1,8 +1,12 @@
// RUN: %clang_cc1 -fsyntax-only -Wlifetime-safety -Wno-dangling -verify %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; // expected-note {{this global dangles}}
+void takeString(std::string&& s);
+
struct ObjWithStaticField {
static int *static_field; // expected-note {{this static storage dangles}}
};
@@ -117,3 +121,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; // expected-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)); //expected-note {{potentially moved here}}
+}
More information about the cfe-commits
mailing list