https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/111123
Relands https://github.com/llvm/llvm-project/pull/108375 which had to be reverted because it was failing on the Windows buildbot. Trying to reland this with `msvc::no_unique_address` on Windows. >From 27ff173e19c5391fe175a144f5bb6909a98289f9 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 4 Oct 2024 10:16:18 +0100 Subject: [PATCH 1/2] Reland "[lldb][test] TestDataFormatterLibcxxStringSimulator.py: add new padding layout (#108375)" This reverts commit ee4dd147baff8f971f3ec5aad5a216ca9837a732. --- .../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..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 @@ -20,7 +20,11 @@ // Pre-D128285 layout. #define PACKED_ANON_STRUCT #endif -// REVISION == 4: current layout +#if REVISION <= 4 +// Pre-2a1ef74 layout. +#define NON_STANDARD_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 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]; @@ -41,6 +46,13 @@ template <class _CharT, size_t = sizeof(_CharT)> struct __padding { template <class _CharT> struct __padding<_CharT, 1> {}; #endif +#else // !NON_STANDARD_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 NON_STANDARD_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 NON_STANDARD_PADDING + unsigned char __padding[sizeof(value_type) - 1]; +#else // !NON_STANDARD_PADDING + [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; +#endif // NON_STANDARD_PADDING + +#endif // SHORT_UNION value_type __data_[__min_cap]; }; >From 81179dc2fb9272d3d4192e9a938a204cb6466e43 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 4 Oct 2024 10:24:15 +0100 Subject: [PATCH 2/2] fixup! --- .../compressed_pair.h | 39 +++++++++++-------- .../libcxx-simulators/string/main.cpp | 4 +- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/make/libcxx-simulators-common/compressed_pair.h b/lldb/packages/Python/lldbsuite/test/make/libcxx-simulators-common/compressed_pair.h index 89eafcec0ea962..6dc53a4e88ffdd 100644 --- a/lldb/packages/Python/lldbsuite/test/make/libcxx-simulators-common/compressed_pair.h +++ b/lldb/packages/Python/lldbsuite/test/make/libcxx-simulators-common/compressed_pair.h @@ -7,6 +7,12 @@ namespace std { namespace __lldb { +#if __has_cpp_attribute(msvc::no_unique_address) +#define _LLDB_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]] +#elif __has_cpp_attribute(no_unique_address) +#define _LLDB_NO_UNIQUE_ADDRESS [[__no_unique_address__]] +#endif + #if COMPRESSED_PAIR_REV == 0 // Post-c88580c layout struct __value_init_tag {}; struct __default_init_tag {}; @@ -55,7 +61,7 @@ class __compressed_pair : private __compressed_pair_elem<_T1, 0>, #elif COMPRESSED_PAIR_REV == 1 // From libc++ datasizeof.h template <class _Tp> struct _FirstPaddingByte { - [[no_unique_address]] _Tp __v_; + _LLDB_NO_UNIQUE_ADDRESS _Tp __v_; char __first_padding_byte_; }; @@ -75,29 +81,30 @@ template <class _ToPad> class __compressed_pair_padding { }; #define _LLDB_COMPRESSED_PAIR(T1, Initializer1, T2, Initializer2) \ - [[__gnu__::__aligned__(alignof(T2))]] [[no_unique_address]] T1 Initializer1; \ - [[no_unique_address]] __compressed_pair_padding<T1> __padding1_; \ - [[no_unique_address]] T2 Initializer2; \ - [[no_unique_address]] __compressed_pair_padding<T2> __padding2_; + [[__gnu__::__aligned__( \ + alignof(T2))]] _LLDB_NO_UNIQUE_ADDRESS T1 Initializer1; \ + _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T1> __padding1_; \ + _LLDB_NO_UNIQUE_ADDRESS T2 Initializer2; \ + _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T2> __padding2_; #define _LLDB_COMPRESSED_TRIPLE(T1, Initializer1, T2, Initializer2, T3, \ Initializer3) \ [[using __gnu__: __aligned__(alignof(T2)), \ - __aligned__(alignof(T3))]] [[no_unique_address]] T1 Initializer1; \ - [[no_unique_address]] __compressed_pair_padding<T1> __padding1_; \ - [[no_unique_address]] T2 Initializer2; \ - [[no_unique_address]] __compressed_pair_padding<T2> __padding2_; \ - [[no_unique_address]] T3 Initializer3; \ - [[no_unique_address]] __compressed_pair_padding<T3> __padding3_; + __aligned__(alignof(T3))]] _LLDB_NO_UNIQUE_ADDRESS T1 Initializer1; \ + _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T1> __padding1_; \ + _LLDB_NO_UNIQUE_ADDRESS T2 Initializer2; \ + _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T2> __padding2_; \ + _LLDB_NO_UNIQUE_ADDRESS T3 Initializer3; \ + _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T3> __padding3_; #elif COMPRESSED_PAIR_REV == 2 #define _LLDB_COMPRESSED_PAIR(T1, Name1, T2, Name2) \ - [[no_unique_address]] T1 Name1; \ - [[no_unique_address]] T2 Name2 + _LLDB_NO_UNIQUE_ADDRESS T1 Name1; \ + _LLDB_NO_UNIQUE_ADDRESS T2 Name2 #define _LLDB_COMPRESSED_TRIPLE(T1, Name1, T2, Name2, T3, Name3) \ - [[no_unique_address]] T1 Name1; \ - [[no_unique_address]] T2 Name2; \ - [[no_unique_address]] T3 Name3 + _LLDB_NO_UNIQUE_ADDRESS T1 Name1; \ + _LLDB_NO_UNIQUE_ADDRESS T2 Name2; \ + _LLDB_NO_UNIQUE_ADDRESS T3 Name3 #endif } // namespace __lldb } // namespace std 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 628d32c8d7a55e..fdf8d53a341384 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 @@ -92,7 +92,7 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { #ifdef NON_STANDARD_PADDING unsigned char __padding[sizeof(value_type) - 1]; #else - [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; + _LLDB_NO_UNIQUE_ADDRESS __padding<sizeof(value_type) - 1> __padding_; #endif #ifdef BITMASKS @@ -162,7 +162,7 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string { #ifdef NON_STANDARD_PADDING unsigned char __padding[sizeof(value_type) - 1]; #else // !NON_STANDARD_PADDING - [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; + _LLDB_NO_UNIQUE_ADDRESS __padding<sizeof(value_type) - 1> __padding_; #endif // NON_STANDARD_PADDING #endif // SHORT_UNION _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits