https://github.com/Michael137 updated 
https://github.com/llvm/llvm-project/pull/147139

>From 2fcd6b1084a6cf91c82aef0ebf78208eda868335 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Sat, 5 Jul 2025 11:15:23 +0100
Subject: [PATCH 1/6] [lldb][test] Combine libstdc++ and libc++ tuple tests
 into generic test

This combines the libc++ and libstdc++ test cases. The main difference
was that the libstdcpp tests had some tuple indexing tests that libc++ didn't 
have.

Split out from https://github.com/llvm/llvm-project/pull/146740
---
 .../{libcxx => generic}/tuple/Makefile        |  1 -
 .../tuple/TestDataFormatterStdTuple.py        | 73 +++++++++++++++++++
 .../{libcxx => generic}/tuple/main.cpp        |  3 +-
 .../tuple/TestDataFormatterLibcxxTuple.py     | 45 ------------
 .../libstdcpp/tuple/Makefile                  |  5 --
 .../tuple/TestDataFormatterStdTuple.py        | 47 ------------
 .../libstdcpp/tuple/main.cpp                  |  9 ---
 7 files changed, 75 insertions(+), 108 deletions(-)
 rename lldb/test/API/functionalities/data-formatter/data-formatter-stl/{libcxx 
=> generic}/tuple/Makefile (75%)
 create mode 100644 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
 rename lldb/test/API/functionalities/data-formatter/data-formatter-stl/{libcxx 
=> generic}/tuple/main.cpp (80%)
 delete mode 100644 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/TestDataFormatterLibcxxTuple.py
 delete mode 100644 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile
 delete mode 100644 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
 delete mode 100644 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp

diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/Makefile
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/Makefile
similarity index 75%
rename from 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/Makefile
rename to 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/Makefile
index 680e1abfbef58..99998b20bcb05 100644
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/Makefile
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/Makefile
@@ -1,4 +1,3 @@
 CXX_SOURCES := main.cpp
 
-USE_LIBCPP := 1
 include Makefile.rules
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
new file mode 100644
index 0000000000000..9e019d328b6b3
--- /dev/null
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
@@ -0,0 +1,73 @@
+"""
+Test lldb data formatter subsystem.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestDataFormatterStdTuple(TestBase):
+    def setUp(self):
+        TestBase.setUp(self)
+        self.line = line_number("main.cpp", "// break here")
+        self.namespace = "std"
+
+    def do_test(self):
+        """Test that std::tuple is displayed correctly"""
+        lldbutil.run_to_source_breakpoint(
+            self, "// break here", lldb.SBFileSpec("main.cpp", False)
+        )
+
+        tuple_name = self.namespace + "::tuple"
+        self.expect("frame variable empty", substrs=[tuple_name, "size=0", 
"{}"])
+
+        self.expect(
+            "frame variable one_elt",
+            substrs=[tuple_name, "size=1", "{", "[0] = 47", "}"],
+        )
+
+        self.expect(
+            "frame variable three_elts",
+            substrs=[
+                tuple_name,
+                "size=3",
+                "{",
+                "[0] = 1",
+                "[1] = 47",
+                '[2] = "foo"',
+                "}",
+            ],
+        )
+
+        self.assertEqual(
+            1, frame.GetValueForVariablePath("one_elt[0]").GetValueAsUnsigned()
+        )
+        self.assertFalse(frame.GetValueForVariablePath("one_elt[1]").IsValid())
+
+        self.assertEqual(
+            '"foobar"', 
frame.GetValueForVariablePath("string_elt[0]").GetSummary()
+        )
+        
self.assertFalse(frame.GetValueForVariablePath("string_elt[1]").IsValid())
+
+        self.assertEqual(
+            1, 
frame.GetValueForVariablePath("three_elts[0]").GetValueAsUnsigned()
+        )
+        self.assertEqual(
+            '"baz"', 
frame.GetValueForVariablePath("three_elts[1]").GetSummary()
+        )
+        self.assertEqual(
+            2, 
frame.GetValueForVariablePath("three_elts[2]").GetValueAsUnsigned()
+        )
+        
self.assertFalse(frame.GetValueForVariablePath("three_elts[3]").IsValid())
+
+    @add_test_categories(["libc++"])
+    def test_libcxx(self):
+        self.build(dictionary={"USE_LIBCPP": 1})
+        self.do_test()
+
+    @add_test_categories(["libstdcxx"])
+    def test_libstdcxx(self):
+        self.build(dictionary={"USE_LIBSTDCPP": 1})
+        self.do_test()
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/main.cpp
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/main.cpp
similarity index 80%
rename from 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/main.cpp
rename to 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/main.cpp
index beb44cd960005..d49dbe8a5f1af 100644
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/main.cpp
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/main.cpp
@@ -1,9 +1,10 @@
-#include <tuple>
 #include <string>
+#include <tuple>
 
 int main() {
   std::tuple<> empty;
   std::tuple<int> one_elt{47};
+  std::tuple<std::string> string_elt{"foobar"};
   std::tuple<int, long, std::string> three_elts{1, 47l, "foo"};
   return 0; // break here
 }
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/TestDataFormatterLibcxxTuple.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/TestDataFormatterLibcxxTuple.py
deleted file mode 100644
index 5b6dfaf5e5d9d..0000000000000
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/tuple/TestDataFormatterLibcxxTuple.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""
-Test lldb data formatter subsystem.
-"""
-
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class TestDataFormatterLibcxxTuple(TestBase):
-    def setUp(self):
-        TestBase.setUp(self)
-        self.line = line_number("main.cpp", "// break here")
-        self.namespace = "std"
-
-    @add_test_categories(["libc++"])
-    def test(self):
-        """Test that std::tuple is displayed correctly"""
-        self.build()
-        lldbutil.run_to_source_breakpoint(
-            self, "// break here", lldb.SBFileSpec("main.cpp", False)
-        )
-
-        tuple_name = self.namespace + "::tuple"
-        self.expect("frame variable empty", substrs=[tuple_name, "size=0", 
"{}"])
-
-        self.expect(
-            "frame variable one_elt",
-            substrs=[tuple_name, "size=1", "{", "[0] = 47", "}"],
-        )
-
-        self.expect(
-            "frame variable three_elts",
-            substrs=[
-                tuple_name,
-                "size=3",
-                "{",
-                "[0] = 1",
-                "[1] = 47",
-                '[2] = "foo"',
-                "}",
-            ],
-        )
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile
deleted file mode 100644
index bf8e6b8703f36..0000000000000
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-CXX_SOURCES := main.cpp
-
-USE_LIBSTDCPP := 1
-
-include Makefile.rules
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
deleted file mode 100644
index 1433b5bc1acb8..0000000000000
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-Test lldb data formatter subsystem.
-"""
-
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class StdTupleDataFormatterTestCase(TestBase):
-    @add_test_categories(["libstdcxx"])
-    @expectedFailureAll(bugnumber="llvm.org/pr50861", compiler="gcc")
-    def test_with_run_command(self):
-        self.build()
-        self.runCmd("file " + self.getBuildArtifact("a.out"), 
CURRENT_EXECUTABLE_SET)
-
-        lldbutil.run_break_set_by_source_regexp(self, "Set break point at this 
line.")
-        self.runCmd("run", RUN_SUCCEEDED)
-
-        # The stop reason of the thread should be breakpoint.
-        self.expect(
-            "thread list",
-            STOPPED_DUE_TO_BREAKPOINT,
-            substrs=["stopped", "stop reason = breakpoint"],
-        )
-
-        frame = self.frame()
-        self.assertTrue(frame.IsValid())
-
-        self.expect("frame variable ti", substrs=["[0] = 1"])
-        self.expect("frame variable ts", substrs=['[0] = "foobar"'])
-        self.expect("frame variable tt", substrs=["[0] = 1", '[1] = "baz"', 
"[2] = 2"])
-
-        self.assertEqual(1, 
frame.GetValueForVariablePath("ti[0]").GetValueAsUnsigned())
-        self.assertFalse(frame.GetValueForVariablePath("ti[1]").IsValid())
-
-        self.assertEqual(
-            '"foobar"', frame.GetValueForVariablePath("ts[0]").GetSummary()
-        )
-        self.assertFalse(frame.GetValueForVariablePath("ts[1]").IsValid())
-
-        self.assertEqual(1, 
frame.GetValueForVariablePath("tt[0]").GetValueAsUnsigned())
-        self.assertEqual('"baz"', 
frame.GetValueForVariablePath("tt[1]").GetSummary())
-        self.assertEqual(2, 
frame.GetValueForVariablePath("tt[2]").GetValueAsUnsigned())
-        self.assertFalse(frame.GetValueForVariablePath("tt[3]").IsValid())
diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp
deleted file mode 100644
index 7247742ee6bb5..0000000000000
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <memory>
-#include <string>
-
-int main() {
-  std::tuple<int> ti{1};
-  std::tuple<std::string> ts{"foobar"};
-  std::tuple<int, std::string, int> tt{1, "baz", 2};
-  return 0; // Set break point at this line.
-}

>From 7ccbe8f3c34a6a5f7732a48fddfe4af7caa07573 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Mon, 7 Jul 2025 09:09:23 +0100
Subject: [PATCH 2/6] fixup! add tuple container summary

---
 lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 06412e34eb777..1790cd06fabf9 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -1504,6 +1504,10 @@ static void 
LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
                 "^std::((__debug::)?|(__cxx11::)?)list<.+>(( )?&)?$",
                 stl_summary_flags, true);
 
+  AddCXXSummary(cpp_category_sp, ContainerSizeSummaryProvider,
+                "libstdc++ std::tuple summary provider",
+                "^std::tuple<.+>$", stl_summary_flags, true);
+
   cpp_category_sp->AddTypeSummary(
       "^std::((__debug::)?|(__cxx11::)?)forward_list<.+>(( )?&)?$",
       eFormatterMatchRegex,

>From 31898f4d156e425f6a0f1e949ba5ce42cba9dcb9 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Mon, 7 Jul 2025 09:09:33 +0100
Subject: [PATCH 3/6] fixup! clang-format

---
 lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 1790cd06fabf9..35ec48087a727 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -1505,8 +1505,8 @@ static void 
LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
                 stl_summary_flags, true);
 
   AddCXXSummary(cpp_category_sp, ContainerSizeSummaryProvider,
-                "libstdc++ std::tuple summary provider",
-                "^std::tuple<.+>$", stl_summary_flags, true);
+                "libstdc++ std::tuple summary provider", "^std::tuple<.+>$",
+                stl_summary_flags, true);
 
   cpp_category_sp->AddTypeSummary(
       "^std::((__debug::)?|(__cxx11::)?)forward_list<.+>(( )?&)?$",

>From 77cc9ba28d32329155dbcb8f6fbe953784536496 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Mon, 7 Jul 2025 09:33:59 +0100
Subject: [PATCH 4/6] fixup! declare 'frame' variable

---
 .../generic/tuple/TestDataFormatterStdTuple.py                 | 3 +++
 1 file changed, 3 insertions(+)

diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
index 9e019d328b6b3..d3e5dc2987e77 100644
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
@@ -41,6 +41,9 @@ def do_test(self):
             ],
         )
 
+        frame = self.frame()
+        self.assertTrue(frame.IsValid())
+
         self.assertEqual(
             1, frame.GetValueForVariablePath("one_elt[0]").GetValueAsUnsigned()
         )

>From d1712587bbcf8290007afa5bc8838c8852ddedbc Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Mon, 7 Jul 2025 18:24:18 +0100
Subject: [PATCH 5/6] fixup! adjust test assertions

---
 .../generic/tuple/TestDataFormatterStdTuple.py              | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
index d3e5dc2987e77..ade502e12b928 100644
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/tuple/TestDataFormatterStdTuple.py
@@ -45,7 +45,7 @@ def do_test(self):
         self.assertTrue(frame.IsValid())
 
         self.assertEqual(
-            1, frame.GetValueForVariablePath("one_elt[0]").GetValueAsUnsigned()
+            47, 
frame.GetValueForVariablePath("one_elt[0]").GetValueAsUnsigned()
         )
         self.assertFalse(frame.GetValueForVariablePath("one_elt[1]").IsValid())
 
@@ -58,10 +58,10 @@ def do_test(self):
             1, 
frame.GetValueForVariablePath("three_elts[0]").GetValueAsUnsigned()
         )
         self.assertEqual(
-            '"baz"', 
frame.GetValueForVariablePath("three_elts[1]").GetSummary()
+            47, 
frame.GetValueForVariablePath("three_elts[1]").GetValueAsUnsigned()
         )
         self.assertEqual(
-            2, 
frame.GetValueForVariablePath("three_elts[2]").GetValueAsUnsigned()
+            '"foo"', 
frame.GetValueForVariablePath("three_elts[2]").GetSummary()
         )
         
self.assertFalse(frame.GetValueForVariablePath("three_elts[3]").IsValid())
 

>From 5c68089e377ed469e41f16462a7743ecf6aba010 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuc...@gmail.com>
Date: Tue, 8 Jul 2025 09:15:21 +0100
Subject: [PATCH 6/6] fixup! adjust std::tuple regex to account for empty tuple

---
 .../source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 35ec48087a727..e64b3ebabd740 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -1505,8 +1505,8 @@ static void 
LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
                 stl_summary_flags, true);
 
   AddCXXSummary(cpp_category_sp, ContainerSizeSummaryProvider,
-                "libstdc++ std::tuple summary provider", "^std::tuple<.+>$",
-                stl_summary_flags, true);
+                "libstdc++ std::tuple summary provider",
+                "^std::tuple<.*>(( )?&)?$", stl_summary_flags, true);
 
   cpp_category_sp->AddTypeSummary(
       "^std::((__debug::)?|(__cxx11::)?)forward_list<.+>(( )?&)?$",
@@ -1550,7 +1550,7 @@ static void 
LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
   AddCXXSynthetic(
       cpp_category_sp,
       lldb_private::formatters::LibStdcppTupleSyntheticFrontEndCreator,
-      "std::tuple synthetic children", "^std::tuple<.+>(( )?&)?$",
+      "std::tuple synthetic children", "^std::tuple<.*>(( )?&)?$",
       stl_synth_flags, true);
 
   static constexpr const char *const libstdcpp_std_coroutine_handle_regex =

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

Reply via email to