[Lldb-commits] [lldb] 4ca8fb1 - [lldb][test] TestDataFormatterLibcxxStringSimulator.py: fix padding for current layout (#108362)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 13 03:01:28 PDT 2024
Author: Michael Buch
Date: 2024-09-13T11:01:25+01:00
New Revision: 4ca8fb18129e6465c3594a8681f1cca0e2aff724
URL: https://github.com/llvm/llvm-project/commit/4ca8fb18129e6465c3594a8681f1cca0e2aff724
DIFF: https://github.com/llvm/llvm-project/commit/4ca8fb18129e6465c3594a8681f1cca0e2aff724.diff
LOG: [lldb][test] TestDataFormatterLibcxxStringSimulator.py: fix padding for current layout (#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 > 1`, `BITMASKS` is never set, so for those tests we
lose the `__padding` member.
This patch fixes this by splitting out the `SUBCLASS_PADDING` out of the
ifdef.
Drive-by:
* Also run expression evaluator on the string to provide is with some
extra coverage.
Added:
Modified:
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp
Removed:
################################################################################
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..b010dc25f8f804 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,19 +71,20 @@ 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;
-#endif
+#endif // BITMASKS
+#endif // SUBCLASS_PADDING
};
#ifdef BITMASKS
More information about the lldb-commits
mailing list