https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/108375
>From 76d99481604ffefa7a1f438cbe65966a45c63a26 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 12 Sep 2024 12:55:17 +0100 Subject: [PATCH 1/3] [lldb][test] TestDataFormatterLibcxxStringSimulator.py: add new padding layout Depends on https://github.com/llvm/llvm-project/pull/108362. Adds new layout for https://github.com/llvm/llvm-project/pull/105865. --- .../TestDataFormatterLibcxxStringSimulator.py | 2 +- .../libcxx-simulators/string/main.cpp | 34 +++++++++++++++---- 2 files changed, 29 insertions(+), 7 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 afe6374e55a355..fff181440b6d7c 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 @@ -27,7 +27,7 @@ def _run_test(self, defines): for v in [None, "ALTERNATE_LAYOUT"]: - for r in range(5): + for r in range(6): for c in range(3): name = "test_r%d_c%d" % (r, c) defines = ["REVISION=%d" % r, "COMPRESSED_PAIR_REV=%d" % c] 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 f8fc13c10c4372..8e1137c89acc94 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 @@ -20,7 +20,11 @@ // Pre-D128285 layout. #define PACKED_ANON_STRUCT #endif -// REVISION == 4: current layout +#if REVISION <= 4 +// Pre-TODO layout. +#define UB_PADDING +#endif +// REVISION == 5: current layout #ifdef PACKED_ANON_STRUCT #define BEGIN_PACKED_ANON_STRUCT struct __attribute__((packed)) { @@ -34,6 +38,7 @@ namespace std { namespace __lldb { +#ifdef UB_PADDING #if defined(ALTERNATE_LAYOUT) && defined(SUBCLASS_PADDING) template <class _CharT, size_t = sizeof(_CharT)> struct __padding { unsigned char __xx[sizeof(_CharT) - 1]; @@ -41,6 +46,13 @@ template <class _CharT, size_t = sizeof(_CharT)> struct __padding { template <class _CharT> struct __padding<_CharT, 1> {}; #endif +#else // !UB_PADDING +template <size_t _PaddingSize> struct __padding { + char __padding_[_PaddingSize]; +}; + +template <> struct __padding<0> {}; +#endif template <class _CharT, class _Traits, class _Allocator> class basic_string { public: @@ -77,7 +89,12 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { }; #else // !SUBCLASS_PADDING +#ifdef UB_PADDING unsigned char __padding[sizeof(value_type) - 1]; +#else + [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; +#endif + #ifdef BITMASKS unsigned char __size_; #else // !BITMASKS @@ -129,21 +146,26 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { union { #ifdef BITMASKS unsigned char __size_; -#else +#else // !BITMASKS struct { unsigned char __is_long_ : 1; unsigned char __size_ : 7; }; -#endif +#endif // BITMASKS value_type __lx; }; -#else +#else // !SHORT_UNION BEGIN_PACKED_ANON_STRUCT unsigned char __is_long_ : 1; unsigned char __size_ : 7; END_PACKED_ANON_STRUCT - char __padding_[sizeof(value_type) - 1]; -#endif +#ifdef UB_PADDING + unsigned char __padding[sizeof(value_type) - 1]; +#else // !UB_PADDING + [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; +#endif // UB_PADDING + +#endif // SHORT_UNION value_type __data_[__min_cap]; }; >From 6706daebbc06beb8e5438e4f2aff5e4b68a016fb Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 13 Sep 2024 11:16:52 +0100 Subject: [PATCH 2/3] fixup! rename ifdef --- .../libcxx-simulators/string/main.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 8e1137c89acc94..50fbcd7a4b9542 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 @@ -22,7 +22,7 @@ #endif #if REVISION <= 4 // Pre-TODO layout. -#define UB_PADDING +#define NON_STANDARD_PADDING #endif // REVISION == 5: current layout @@ -38,7 +38,7 @@ namespace std { namespace __lldb { -#ifdef UB_PADDING +#ifdef NON_STANDARD_PADDING #if defined(ALTERNATE_LAYOUT) && defined(SUBCLASS_PADDING) template <class _CharT, size_t = sizeof(_CharT)> struct __padding { unsigned char __xx[sizeof(_CharT) - 1]; @@ -46,7 +46,7 @@ template <class _CharT, size_t = sizeof(_CharT)> struct __padding { template <class _CharT> struct __padding<_CharT, 1> {}; #endif -#else // !UB_PADDING +#else // !NON_STANDARD_PADDING template <size_t _PaddingSize> struct __padding { char __padding_[_PaddingSize]; }; @@ -89,7 +89,7 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { }; #else // !SUBCLASS_PADDING -#ifdef UB_PADDING +#ifdef NON_STANDARD_PADDING unsigned char __padding[sizeof(value_type) - 1]; #else [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; @@ -159,11 +159,11 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { unsigned char __is_long_ : 1; unsigned char __size_ : 7; END_PACKED_ANON_STRUCT -#ifdef UB_PADDING +#ifdef NON_STANDARD_PADDING unsigned char __padding[sizeof(value_type) - 1]; -#else // !UB_PADDING +#else // !NON_STANDARD_PADDING [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; -#endif // UB_PADDING +#endif // NON_STANDARD_PADDING #endif // SHORT_UNION value_type __data_[__min_cap]; >From 3dd9a0122b1b8d6c7847f0afa9c0af51206f0401 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 3 Oct 2024 12:35:57 +0100 Subject: [PATCH 3/3] fixup! fix comment --- .../data-formatter-stl/libcxx-simulators/string/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 50fbcd7a4b9542..628d32c8d7a55e 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 @@ -21,7 +21,7 @@ #define PACKED_ANON_STRUCT #endif #if REVISION <= 4 -// Pre-TODO layout. +// Pre-2a1ef74 layout. #define NON_STANDARD_PADDING #endif // REVISION == 5: current layout _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits