https://github.com/usx95 updated https://github.com/llvm/llvm-project/pull/177661
>From fc31d53c40d28794b06b101aedcc29f9cbe08289 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <[email protected]> Date: Fri, 23 Jan 2026 19:11:45 +0000 Subject: [PATCH] Fix issue with references to fields --- .../Analysis/LifetimeSafety/FactsGenerator.cpp | 3 ++- clang/test/Sema/warn-lifetime-safety.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp index d5990597e1614..5aad51728054f 100644 --- a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp +++ b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp @@ -204,7 +204,8 @@ void FactsGenerator::VisitCXXMemberCallExpr(const CXXMemberCallExpr *MCE) { } void FactsGenerator::VisitMemberExpr(const MemberExpr *ME) { - if (isa<FieldDecl>(ME->getMemberDecl())) { + auto *MD = ME->getMemberDecl(); + if (isa<FieldDecl>(MD) && doesDeclHaveStorage(MD)) { assert(ME->isGLValue() && "Field member should be GL value"); OriginList *Dst = getOriginsList(*ME); assert(Dst && "Field member should have an origin list as it is GL value"); diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp index 4272f660a4adf..baa19716a12e4 100644 --- a/clang/test/Sema/warn-lifetime-safety.cpp +++ b/clang/test/Sema/warn-lifetime-safety.cpp @@ -1553,4 +1553,19 @@ void uaf_anonymous_union() { } // expected-note {{destroyed here}} (void)ip; // expected-note {{later used here}} } + +struct RefMember { + std::string& str_ref; + std::string* str_ptr; + std::string str; + RefMember(); + ~RefMember(); +}; + +std::string_view refMemberReturnView1(RefMember a) { return a.str_ref; } +std::string_view refMemberReturnView2(RefMember a) { return *a.str_ptr; } +std::string_view refMemberReturnView3(RefMember a) { return a.str; } // expected-warning {{address of stack memory is returned later}} expected-note {{returned here}} +std::string& refMemberReturnRef1(RefMember a) { return a.str_ref; } +std::string& refMemberReturnRef2(RefMember a) { return *a.str_ptr; } +std::string& refMemberReturnRef3(RefMember a) { return a.str; } // expected-warning {{address of stack memory is returned later}} expected-note {{returned here}} } // namespace field_access _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
