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