llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Michael Buch (Michael137) <details> <summary>Changes</summary> Depends on https://github.com/llvm/llvm-project/pull/108362 and https://github.com/llvm/llvm-project/pull/108343. Adds new layout for https://github.com/llvm/llvm-project/pull/105865. --- Full diff: https://github.com/llvm/llvm-project/pull/108375.diff 2 Files Affected: - (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/TestDataFormatterLibcxxStringSimulator.py (+4-1) - (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/string/main.cpp (+33-10) ``````````diff 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..dd9f5de22c9057 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,9 +22,12 @@ 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): + for r in range(6): name = "test_r%d" % r defines = ["REVISION=%d" % r] if v: 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..5cf3a85007fb64 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: @@ -71,19 +83,25 @@ 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 + +#ifdef UB_PADDING unsigned char __padding[sizeof(value_type) - 1]; - unsigned char __size_; +#else + [[no_unique_address]] __padding<sizeof(value_type) - 1> __padding_; #endif + +#ifdef BITMASKS + unsigned char __size_; #else // !BITMASKS unsigned char __size_ : 7; unsigned char __is_long_ : 1; -#endif +#endif // BITMASKS +#endif // SUBCLASS_PADDING }; #ifdef BITMASKS @@ -128,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]; }; `````````` </details> https://github.com/llvm/llvm-project/pull/108375 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits