Author: Utkarsh Saxena
Date: 2026-03-17T13:53:58+01:00
New Revision: 34fa16afff1d8486512001e30b917c264a0a2795

URL: 
https://github.com/llvm/llvm-project/commit/34fa16afff1d8486512001e30b917c264a0a2795
DIFF: 
https://github.com/llvm/llvm-project/commit/34fa16afff1d8486512001e30b917c264a0a2795.diff

LOG: [LifetimeSafety] Exclude basic_string::insert from capturing methods 
(#186989)

Fixes https://github.com/llvm/llvm-project/issues/186817

Added: 
    

Modified: 
    clang/lib/Sema/SemaAttr.cpp
    clang/test/Sema/Inputs/lifetime-analysis.h
    clang/test/Sema/warn-lifetime-analysis-nocfg.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp
index 55111ca6a7cfe..7c79f954e6743 100644
--- a/clang/lib/Sema/SemaAttr.cpp
+++ b/clang/lib/Sema/SemaAttr.cpp
@@ -320,6 +320,8 @@ void Sema::inferLifetimeCaptureByAttribute(FunctionDecl 
*FD) {
       "insert", "insert_or_assign", "push", "push_front", "push_back"};
   if (!CapturingMethods.contains(MD->getName()))
     return;
+  if (MD->getName() == "insert" && MD->getParent()->getName() == 
"basic_string")
+    return;
   Annotate(MD);
 }
 

diff  --git a/clang/test/Sema/Inputs/lifetime-analysis.h 
b/clang/test/Sema/Inputs/lifetime-analysis.h
index 56cacdd964f79..0b6bdaef83f9d 100644
--- a/clang/test/Sema/Inputs/lifetime-analysis.h
+++ b/clang/test/Sema/Inputs/lifetime-analysis.h
@@ -176,6 +176,9 @@ struct basic_string {
   basic_string& operator+=(const basic_string&);
   basic_string& operator+=(const T*);
   void push_back(T);
+
+  template<class StringViewLike> basic_string& insert(size_t index, const 
StringViewLike&);
+
   void clear();
   const T *c_str() const;
   operator basic_string_view<T> () const;

diff  --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp 
b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
index 3305e9e270d86..4996664d26452 100644
--- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
+++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
@@ -1287,3 +1287,8 @@ void test() {
     const auto ptrTSC = StringTemplateSpecC<char>().data();  // Both have 
attribute         // expected-warning {{temporary whose address is used}}
 }
 } // namespace GH175391
+
+void string_insert_GH_186817() {
+    std::string msg;
+    msg.insert(0, std::string_view(std::string("a temporary")));
+}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to