https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/108362
IIUC, the history of `std::string`'s `__short` structure in the alternate ABI layout (as recorded by the simulator test) looks as follows: * First layout ( `SUBCLASS_PADDING` is defined): ``` struct __short { value_type __data_[__min_cap]; struct : __padding<value_type> { unsigned char __size_; }; }; ``` * Then: ``` struct __short { value_type __data_[__min_cap]; unsigned char __padding[sizeof(value_type) - 1]; unsigned char __size_; }; ``` * Then, post-`BITMASKS`: ``` struct __short { value_type __data_[__min_cap]; unsigned char __padding[sizeof(value_type) - 1]; unsigned char __size_ : 7; unsigned char __is_long_ : 1; }; ``` Which is the one that's [on top-of-tree](https://github.com/llvm/llvm-project/blob/89c10e27d8b4d5f44998aad9abd2590d9f96c5df/libcxx/include/string#L854-L859). But for `REVISION > 2`, `BITMASKS` is never set, so for those tests we lose the `__padding` member. This patch fixes this by Drive-by: * Also run expression evaluator on the string to provide is with some extra coverage. >From 8b999e3330f4b414d3ffe56c500d407cbde57be0 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 12 Sep 2024 11:05:27 +0100 Subject: [PATCH] [lldb][test] TestDataFormatterLibcxxStringSimulator.py: fix padding for current layout Drive-by: * Also run expression evaluator on the string to provide is with some extra coverage. --- .../string/TestDataFormatterLibcxxStringSimulator.py | 3 +++ .../data-formatter-stl/libcxx-simulators/string/main.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py index 3e5c493692c4f0..98d2c7320003e4 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py @@ -22,6 +22,9 @@ def _run_test(self, defines): self.expect_var_path("shortstring", summary='"short"') self.expect_var_path("longstring", summary='"I am a very long string"') + self.expect_expr("shortstring", result_summary='"short"') + self.expect_expr("longstring", result_summary='"I am a very long string"') + for v in [None, "ALTERNATE_LAYOUT"]: for r in range(5): diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp index 7beeb9c39de49e..74baeba6ec879b 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp @@ -71,15 +71,15 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { struct __short { value_type __data_[__min_cap]; -#ifdef BITMASKS #ifdef SUBCLASS_PADDING struct : __padding<value_type> { unsigned char __size_; }; -#else +#else // !SUBCLASS_PADDING + unsigned char __padding[sizeof(value_type) - 1]; +#ifdef BITMASKS unsigned char __size_; -#endif #else // !BITMASKS unsigned char __size_ : 7; unsigned char __is_long_ : 1; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits