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
