https://github.com/benedekaibas created 
https://github.com/llvm/llvm-project/pull/214245

In #211552 `MemRegion::getDescriptiveName` got generalized and now has an 
`AllowFallback` functionality which makes it possible to remove 
`getRegionName()` from the modeling checker and from both of the dependent 
checkers (`UseAfterLifetimeEnd` and `DanglingPtrDeref`).

>From 4548ef138dfb6c1e2e0db3f43bfd947a64eb4f8a Mon Sep 17 00:00:00 2001
From: benedekaibas <[email protected]>
Date: Wed, 5 Aug 2026 16:43:37 +0200
Subject: [PATCH] [analyzer] Remove getRegionName.

---
 .../Checkers/DanglingPtrDeref.cpp             |  6 ++++--
 .../Checkers/LifetimeModeling.cpp             |  8 --------
 .../Checkers/LifetimeModeling.h               |  4 ----
 .../Checkers/UseAfterLifetimeEnd.cpp          | 19 ++++++++++++-------
 4 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/DanglingPtrDeref.cpp 
b/clang/lib/StaticAnalyzer/Checkers/DanglingPtrDeref.cpp
index bd4cd864cb768..a34bf20eebafb 100644
--- a/clang/lib/StaticAnalyzer/Checkers/DanglingPtrDeref.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/DanglingPtrDeref.cpp
@@ -71,7 +71,8 @@ void DanglingPtrDeref::reportUseAfterScope(const MemRegion 
*Region,
                                            CheckerContext &C) const {
   auto BR = std::make_unique<PathSensitiveBugReport>(
       BugMsg,
-      (llvm::Twine("Use of ") + lifetime_modeling::getRegionName(Region) +
+      (llvm::Twine("Use of ") +
+       Region->getDescriptiveName(/*UseQuotes=*/true, /*AllowFallback=*/true) +
        " after its lifetime ended."),
       N);
   BR->addVisitor<DanglingPtrDerefBRVisitor>(Region);
@@ -103,7 +104,8 @@ DanglingPtrDerefBRVisitor::VisitNode(const ExplodedNode *N,
       S, BRC.getSourceManager(), N->getStackFrame());
   return std::make_shared<PathDiagnosticEventPiece>(
       Pos,
-      (lifetime_modeling::getRegionName(SourceRegion) +
+      (SourceRegion->getDescriptiveName(/*UseQuotes=*/true,
+                                        /*AllowFallback=*/true) +
        llvm::Twine(" is destroyed here"))
           .str(),
       true);
diff --git a/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.cpp 
b/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.cpp
index 7b9fb7acb21ab..85ea496cdfb0e 100644
--- a/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.cpp
@@ -92,14 +92,6 @@ static ProgramStateRef bindSource(ProgramStateRef State, 
SVal RetVal,
   return State;
 }
 
-std::string lifetime_modeling::getRegionName(const MemRegion *Reg) {
-  // FIXME: Once the checker supports heap allocation, more region kinds
-  // should be handled to produce the correct descriptive name.
-  if (const std::string RegName = Reg->getDescriptiveName(); !RegName.empty())
-    return RegName;
-  return "the region";
-}
-
 void LifetimeModeling::checkPostCall(const CallEvent &Call,
                                      CheckerContext &C) const {
   ProgramStateRef State = C.getState();
diff --git a/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.h 
b/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.h
index 8d6c8e4882d1c..747bd8d6fd74c 100644
--- a/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.h
+++ b/clang/lib/StaticAnalyzer/Checkers/LifetimeModeling.h
@@ -18,10 +18,6 @@ bool isDeallocated(ProgramStateRef State, const MemRegion 
*Region);
 
 /// Returns true if \p Val is a key in the LifetimeBoundMap.
 bool isBoundToLifetimeSource(ProgramStateRef State, SVal Val);
-
-/// Returns the descriptive name of the memory region or a placeholder if a
-/// descriptive name cannot be constructed for it.
-std::string getRegionName(const MemRegion *Reg);
 } // namespace clang::ento::lifetime_modeling
 
 #endif // LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_LIFETIMEMODELING_H
diff --git a/clang/lib/StaticAnalyzer/Checkers/UseAfterLifetimeEnd.cpp 
b/clang/lib/StaticAnalyzer/Checkers/UseAfterLifetimeEnd.cpp
index a9065352adae6..c36f986c5e3b8 100644
--- a/clang/lib/StaticAnalyzer/Checkers/UseAfterLifetimeEnd.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/UseAfterLifetimeEnd.cpp
@@ -99,7 +99,8 @@ void UseAfterLifetimeEnd::reportDanglingSource(const 
MemRegion *Source,
   auto BR = std::make_unique<PathSensitiveBugReport>(
       BugMsg,
       (llvm::Twine("Returning value bound to ") +
-       lifetime_modeling::getRegionName(Source) + " that will go out of 
scope"),
+       Source->getDescriptiveName(/*UseQuotes=*/true, /*AllowFallback=*/true) +
+       " that will go out of scope"),
       N);
 
   if (SourceRange Range = getRegionDeclRange(Source); Range.isValid())
@@ -146,7 +147,9 @@ UseAfterLifetimeEndBRVisitor::VisitNode(const ExplodedNode 
*N,
   auto Piece = createSourcePiece(
       N, BRC,
       (llvm::Twine("Value's lifetime bound to the lifetime of ") +
-       lifetime_modeling::getRegionName(SourceRegion) + " here")
+       SourceRegion->getDescriptiveName(/*UseQuotes=*/true,
+                                        /*AllowFallback=*/true) +
+       " here")
           .str());
   return Piece;
 }
@@ -155,11 +158,13 @@ PathDiagnosticPieceRef
 UseAfterLifetimeEndBRVisitor::getEndPath(const ExplodedNode *N,
                                          BugReporterContext &BRC,
                                          PathSensitiveBugReport &BR) {
-  auto Piece = createSourcePiece(
-      N, BRC,
-      (llvm::Twine("Lifetime of ") +
-       lifetime_modeling::getRegionName(SourceRegion) + " ended here")
-          .str());
+  auto Piece =
+      createSourcePiece(N, BRC,
+                        (llvm::Twine("Lifetime of ") +
+                         SourceRegion->getDescriptiveName(
+                             /*UseQuotes=*/true, /*AllowFallback=*/true) +
+                         " ended here")
+                            .str());
   return Piece;
 }
 

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

Reply via email to