https://github.com/rupprecht updated 
https://github.com/llvm/llvm-project/pull/142815

>From 14a5860c98b5c0c067c8b12ccbaf32bfa45b1a66 Mon Sep 17 00:00:00 2001
From: Jordan Rupprecht <ruppre...@google.com>
Date: Wed, 4 Jun 2025 09:53:12 -0700
Subject: [PATCH 1/4] [lldb] Provide TrackingOutputBufferDeleter for custom
 unique_ptr deleter

---
 lldb/include/lldb/Core/DemangledNameInfo.h | 10 +++
 lldb/unittests/Core/MangledTest.cpp        | 72 +++++++++++-----------
 2 files changed, 46 insertions(+), 36 deletions(-)

diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h 
b/lldb/include/lldb/Core/DemangledNameInfo.h
index 4b5ba5e42b3b1..8d730efbc44d8 100644
--- a/lldb/include/lldb/Core/DemangledNameInfo.h
+++ b/lldb/include/lldb/Core/DemangledNameInfo.h
@@ -13,6 +13,7 @@
 #include "llvm/Demangle/Utility.h"
 
 #include <cstddef>
+#include <cstdlib>
 #include <utility>
 
 namespace lldb_private {
@@ -159,4 +160,13 @@ struct TrackingOutputBuffer : public 
llvm::itanium_demangle::OutputBuffer {
 };
 } // namespace lldb_private
 
+struct TrackingOutputBufferDeleter {
+  void operator()(TrackingOutputBuffer *TOB) {
+    if (!TOB)
+      return;
+    std::free(TOB->getBuffer());
+    delete TOB;
+  }
+};
+
 #endif // LLDB_CORE_DEMANGLEDNAMEINFO_H
diff --git a/lldb/unittests/Core/MangledTest.cpp 
b/lldb/unittests/Core/MangledTest.cpp
index e9dfd05459642..42e732b79dedf 100644
--- a/lldb/unittests/Core/MangledTest.cpp
+++ b/lldb/unittests/Core/MangledTest.cpp
@@ -26,6 +26,8 @@
 
 #include "gtest/gtest.h"
 
+#include <memory>
+
 using namespace lldb;
 using namespace lldb_private;
 
@@ -589,25 +591,25 @@ TEST_P(DemanglingPartsTestFixture, DemanglingParts) {
 
   ASSERT_NE(nullptr, Root);
 
-  TrackingOutputBuffer OB;
-  Root->print(OB);
-  auto demangled = std::string_view(OB);
+  auto OB = std::unique_ptr<TrackingOutputBuffer, TrackingOutputBufferDeleter>(
+      new TrackingOutputBuffer());
+  Root->print(*OB);
+  auto demangled = std::string_view(*OB);
 
-  ASSERT_EQ(OB.NameInfo.hasBasename(), valid_basename);
+  ASSERT_EQ(OB->NameInfo.hasBasename(), valid_basename);
 
-  EXPECT_EQ(OB.NameInfo.BasenameRange, info.BasenameRange);
-  EXPECT_EQ(OB.NameInfo.ScopeRange, info.ScopeRange);
-  EXPECT_EQ(OB.NameInfo.ArgumentsRange, info.ArgumentsRange);
-  EXPECT_EQ(OB.NameInfo.QualifiersRange, info.QualifiersRange);
+  EXPECT_EQ(OB->NameInfo.BasenameRange, info.BasenameRange);
+  EXPECT_EQ(OB->NameInfo.ScopeRange, info.ScopeRange);
+  EXPECT_EQ(OB->NameInfo.ArgumentsRange, info.ArgumentsRange);
+  EXPECT_EQ(OB->NameInfo.QualifiersRange, info.QualifiersRange);
 
   auto get_part = [&](const std::pair<size_t, size_t> &loc) {
     return demangled.substr(loc.first, loc.second - loc.first);
   };
 
-  EXPECT_EQ(get_part(OB.NameInfo.BasenameRange), basename);
-  EXPECT_EQ(get_part(OB.NameInfo.ScopeRange), scope);
-  EXPECT_EQ(get_part(OB.NameInfo.QualifiersRange), qualifiers);
-  std::free(OB.getBuffer());
+  EXPECT_EQ(get_part(OB->NameInfo.BasenameRange), basename);
+  EXPECT_EQ(get_part(OB->NameInfo.ScopeRange), scope);
+  EXPECT_EQ(get_part(OB->NameInfo.QualifiersRange), qualifiers);
 }
 
 INSTANTIATE_TEST_SUITE_P(DemanglingPartsTests, DemanglingPartsTestFixture,
@@ -635,36 +637,35 @@ TEST_P(DemanglingInfoCorrectnessTestFixutre, Correctness) 
{
 
   ASSERT_NE(nullptr, Root);
 
-  TrackingOutputBuffer OB;
-  Root->print(OB);
+  auto OB = std::unique_ptr<TrackingOutputBuffer, TrackingOutputBufferDeleter>(
+      new TrackingOutputBuffer());
+  Root->print(*OB);
 
   // Filter out cases which would never show up in frames. We only care about
   // function names.
   if (Root->getKind() !=
           llvm::itanium_demangle::Node::Kind::KFunctionEncoding &&
-      Root->getKind() != llvm::itanium_demangle::Node::Kind::KDotSuffix) {
-    std::free(OB.getBuffer());
+      Root->getKind() != llvm::itanium_demangle::Node::Kind::KDotSuffix)
     return;
-  }
 
-  ASSERT_TRUE(OB.NameInfo.hasBasename());
-
-  auto tracked_name = llvm::StringRef(OB);
-
-  auto return_left = tracked_name.slice(0, OB.NameInfo.ScopeRange.first);
-  auto scope = tracked_name.slice(OB.NameInfo.ScopeRange.first,
-                                  OB.NameInfo.ScopeRange.second);
-  auto basename = tracked_name.slice(OB.NameInfo.BasenameRange.first,
-                                     OB.NameInfo.BasenameRange.second);
-  auto template_args = tracked_name.slice(OB.NameInfo.BasenameRange.second,
-                                          OB.NameInfo.ArgumentsRange.first);
-  auto args = tracked_name.slice(OB.NameInfo.ArgumentsRange.first,
-                                 OB.NameInfo.ArgumentsRange.second);
-  auto return_right = tracked_name.slice(OB.NameInfo.ArgumentsRange.second,
-                                         OB.NameInfo.QualifiersRange.first);
-  auto qualifiers = tracked_name.slice(OB.NameInfo.QualifiersRange.first,
-                                       OB.NameInfo.QualifiersRange.second);
-  auto suffix = tracked_name.slice(OB.NameInfo.QualifiersRange.second,
+  ASSERT_TRUE(OB->NameInfo.hasBasename());
+
+  auto tracked_name = llvm::StringRef(*OB);
+
+  auto return_left = tracked_name.slice(0, OB->NameInfo.ScopeRange.first);
+  auto scope = tracked_name.slice(OB->NameInfo.ScopeRange.first,
+                                  OB->NameInfo.ScopeRange.second);
+  auto basename = tracked_name.slice(OB->NameInfo.BasenameRange.first,
+                                     OB->NameInfo.BasenameRange.second);
+  auto template_args = tracked_name.slice(OB->NameInfo.BasenameRange.second,
+                                          OB->NameInfo.ArgumentsRange.first);
+  auto args = tracked_name.slice(OB->NameInfo.ArgumentsRange.first,
+                                 OB->NameInfo.ArgumentsRange.second);
+  auto return_right = tracked_name.slice(OB->NameInfo.ArgumentsRange.second,
+                                         OB->NameInfo.QualifiersRange.first);
+  auto qualifiers = tracked_name.slice(OB->NameInfo.QualifiersRange.first,
+                                       OB->NameInfo.QualifiersRange.second);
+  auto suffix = tracked_name.slice(OB->NameInfo.QualifiersRange.second,
                                    llvm::StringRef::npos);
 
   auto reconstructed_name =
@@ -672,7 +673,6 @@ TEST_P(DemanglingInfoCorrectnessTestFixutre, Correctness) {
                        return_right, qualifiers, suffix);
 
   EXPECT_EQ(reconstructed_name, demangled);
-  std::free(OB.getBuffer());
 }
 
 INSTANTIATE_TEST_SUITE_P(

>From 498de8f6e9679092993cd8e2eae7bbe1834c842e Mon Sep 17 00:00:00 2001
From: Jordan Rupprecht <ruppre...@google.com>
Date: Wed, 4 Jun 2025 09:55:40 -0700
Subject: [PATCH 2/4] Add docs

---
 lldb/include/lldb/Core/DemangledNameInfo.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h 
b/lldb/include/lldb/Core/DemangledNameInfo.h
index 8d730efbc44d8..a3edb3e034eb1 100644
--- a/lldb/include/lldb/Core/DemangledNameInfo.h
+++ b/lldb/include/lldb/Core/DemangledNameInfo.h
@@ -160,6 +160,16 @@ struct TrackingOutputBuffer : public 
llvm::itanium_demangle::OutputBuffer {
 };
 } // namespace lldb_private
 
+/// Custom deleter to use with unique_ptr.
+///
+/// Usage:
+/// \code{.cpp}
+///
+/// auto OB =
+///     std::unique_ptr<TrackingOutputBuffer, TrackingOutputBufferDeleter>(
+///         new TrackingOutputBuffer());
+///
+/// \endcode
 struct TrackingOutputBufferDeleter {
   void operator()(TrackingOutputBuffer *TOB) {
     if (!TOB)

>From 118b4f2df19418d8154566f68ef159d1a958be1a Mon Sep 17 00:00:00 2001
From: Jordan Rupprecht <ruppre...@google.com>
Date: Wed, 4 Jun 2025 13:45:41 -0700
Subject: [PATCH 3/4] Move class to test

---
 lldb/include/lldb/Core/DemangledNameInfo.h | 19 -------------------
 lldb/unittests/Core/MangledTest.cpp        | 19 +++++++++++++++++++
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h 
b/lldb/include/lldb/Core/DemangledNameInfo.h
index a3edb3e034eb1..8fef93e2980c6 100644
--- a/lldb/include/lldb/Core/DemangledNameInfo.h
+++ b/lldb/include/lldb/Core/DemangledNameInfo.h
@@ -160,23 +160,4 @@ struct TrackingOutputBuffer : public 
llvm::itanium_demangle::OutputBuffer {
 };
 } // namespace lldb_private
 
-/// Custom deleter to use with unique_ptr.
-///
-/// Usage:
-/// \code{.cpp}
-///
-/// auto OB =
-///     std::unique_ptr<TrackingOutputBuffer, TrackingOutputBufferDeleter>(
-///         new TrackingOutputBuffer());
-///
-/// \endcode
-struct TrackingOutputBufferDeleter {
-  void operator()(TrackingOutputBuffer *TOB) {
-    if (!TOB)
-      return;
-    std::free(TOB->getBuffer());
-    delete TOB;
-  }
-};
-
 #endif // LLDB_CORE_DEMANGLEDNAMEINFO_H
diff --git a/lldb/unittests/Core/MangledTest.cpp 
b/lldb/unittests/Core/MangledTest.cpp
index 42e732b79dedf..24073fbcf2f5a 100644
--- a/lldb/unittests/Core/MangledTest.cpp
+++ b/lldb/unittests/Core/MangledTest.cpp
@@ -31,6 +31,25 @@
 using namespace lldb;
 using namespace lldb_private;
 
+/// Custom deleter to use with unique_ptr.
+///
+/// Usage:
+/// \code{.cpp}
+///
+/// auto OB =
+///     std::unique_ptr<TrackingOutputBuffer, TrackingOutputBufferDeleter>(
+///         new TrackingOutputBuffer());
+///
+/// \endcode
+struct TrackingOutputBufferDeleter {
+  void operator()(TrackingOutputBuffer *TOB) {
+    if (!TOB)
+      return;
+    std::free(TOB->getBuffer());
+    delete TOB;
+  }
+};
+
 TEST(MangledTest, ResultForValidName) {
   ConstString MangledName("_ZN1a1b1cIiiiEEvm");
   Mangled TheMangled(MangledName);

>From ca2d2d5c8b02688d8fb913e30bbd8191ab45f1e0 Mon Sep 17 00:00:00 2001
From: Jordan Rupprecht <ruppre...@google.com>
Date: Wed, 4 Jun 2025 13:47:42 -0700
Subject: [PATCH 4/4] Move the corresponding include too

---
 lldb/include/lldb/Core/DemangledNameInfo.h | 1 -
 lldb/unittests/Core/MangledTest.cpp        | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h 
b/lldb/include/lldb/Core/DemangledNameInfo.h
index 8fef93e2980c6..4b5ba5e42b3b1 100644
--- a/lldb/include/lldb/Core/DemangledNameInfo.h
+++ b/lldb/include/lldb/Core/DemangledNameInfo.h
@@ -13,7 +13,6 @@
 #include "llvm/Demangle/Utility.h"
 
 #include <cstddef>
-#include <cstdlib>
 #include <utility>
 
 namespace lldb_private {
diff --git a/lldb/unittests/Core/MangledTest.cpp 
b/lldb/unittests/Core/MangledTest.cpp
index 24073fbcf2f5a..46adb62722091 100644
--- a/lldb/unittests/Core/MangledTest.cpp
+++ b/lldb/unittests/Core/MangledTest.cpp
@@ -26,6 +26,7 @@
 
 #include "gtest/gtest.h"
 
+#include <cstdlib>
 #include <memory>
 
 using namespace lldb;

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to