Author: Pavel Labath Date: 2022-07-07T16:20:20+02:00 New Revision: 8262ff44c53568564dc919a43fae274c8b748176
URL: https://github.com/llvm/llvm-project/commit/8262ff44c53568564dc919a43fae274c8b748176 DIFF: https://github.com/llvm/llvm-project/commit/8262ff44c53568564dc919a43fae274c8b748176.diff LOG: [lldb/test] Add a couple of libc++ std::string layouts .. to the "string simulator" test. These layouts were used at some point in the past few months, and are already supported by the code. Added: Modified: lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/TestDataFormatterLibcxxStringSimulator.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/main.cpp Removed: ################################################################################ diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/TestDataFormatterLibcxxStringSimulator.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/TestDataFormatterLibcxxStringSimulator.py index 76cd64660aab0..e156447121cca 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/TestDataFormatterLibcxxStringSimulator.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/TestDataFormatterLibcxxStringSimulator.py @@ -8,6 +8,7 @@ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil +import functools class LibcxxStringDataFormatterSimulatorTestCase(TestBase): @@ -23,23 +24,13 @@ def _run_test(self, defines): self.expect_var_path("shortstring", summary='"short"') self.expect_var_path("longstring", summary='"I am a very long string"') - def test_v1_layout(self): - """ Current v1 layout. """ - self._run_test([]) - - def test_v2_layout(self): - """ Current v2 layout. """ - self._run_test(["ALTERNATE_LAYOUT"]) - - def test_v1_layout_bitmasks(self): - """ Pre-D123580 v1 layout. """ - self._run_test(["BITMASKS"]) - - def test_v2_layout_bitmasks(self): - """ Pre-D123580 v2 layout. """ - self._run_test(["ALTERNATE_LAYOUT", "BITMASKS"]) - - def test_v2_layout_subclass_padding(self): - """ Pre-c3d0205ee771 v2 layout. """ - self._run_test(["ALTERNATE_LAYOUT", "BITMASKS", "SUBCLASS_PADDING"]) - +for v in [None, "ALTERNATE_LAYOUT"]: + for r in range(5): + name = "test_r%d"%r + defines = ["REVISION=%d"%r] + if v: + name += "_" + v + defines += [v] + f = functools.partialmethod( + LibcxxStringDataFormatterSimulatorTestCase._run_test, defines) + setattr(LibcxxStringDataFormatterSimulatorTestCase, name, f) diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/main.cpp index 4852dfd456687..33e71044482a7 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/main.cpp +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/string/simulator/main.cpp @@ -2,6 +2,33 @@ #include <memory> #include <type_traits> +#if REVISION == 0 +// Pre-c3d0205ee771 layout. +#define SUBCLASS_PADDING +#endif +#if REVISION <= 1 +// Pre-D123580 layout. +#define BITMASKS +#endif +#if REVISION <= 2 +// Pre-D125496 layout. +#define SHORT_UNION +#endif +#if REVISION == 3 +// Pre-D128285 layout. +#define PACKED_ANON_STRUCT +#endif +// REVISION == 4: current layout + +#ifdef PACKED_ANON_STRUCT +#define BEGIN_PACKED_ANON_STRUCT struct __attribute__((packed)) { +#define END_PACKED_ANON_STRUCT }; +#else +#define BEGIN_PACKED_ANON_STRUCT +#define END_PACKED_ANON_STRUCT +#endif + + namespace std { namespace __lldb { @@ -110,8 +137,10 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { #ifdef BITMASKS size_type __cap_; #else + BEGIN_PACKED_ANON_STRUCT size_type __is_long_ : 1; size_type __cap_ : sizeof(size_type) * CHAR_BIT - 1; + END_PACKED_ANON_STRUCT #endif size_type __size_; pointer __data_; @@ -124,6 +153,7 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { }; struct __short { +#ifdef SHORT_UNION union { #ifdef BITMASKS unsigned char __size_; @@ -135,6 +165,13 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { #endif value_type __lx; }; +#else + BEGIN_PACKED_ANON_STRUCT + unsigned char __is_long_ : 1; + unsigned char __size_ : 7; + END_PACKED_ANON_STRUCT + char __padding_[sizeof(value_type) - 1]; +#endif value_type __data_[__min_cap]; }; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits