-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[lldb][test] Add a new __compressed_pair layout to libcxx simulator tests #99012
[lldb][test] Add a new __compressed_pair layout to libcxx simulator tests #99012
Conversation
std::__lldb::__compressed_pair<__rep, allocator_type> __r_; | ||
#define __R_ __r_ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably more readable if I just replaced all the __r_.first().XXX
accesses with calls to setXXX
or something
✅ With the latest revision this PR passed the Python code formatter. |
5e4f413
to
6ad0d24
Compare
6ad0d24
to
6f9ff14
Compare
@llvm/pr-subscribers-lldb Author: Michael Buch (Michael137) ChangesThis is a follow-up to #98330 for the upcoming This patch just adds the 2 new copies of Full diff: https://github.com/llvm/llvm-project/pull/99012.diff 5 Files Affected:
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 026e7183ab27a0..f2c1b626bd46f7 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,7 +7,7 @@
namespace std {
namespace __lldb {
-// Post-c88580c layout
+#if COMPRESSED_PAIR_REV == 0 // Post-c88580c layout
struct __value_init_tag {};
struct __default_init_tag {};
@@ -52,6 +52,38 @@ class __compressed_pair : private __compressed_pair_elem<_T1, 0>,
_T1 &first() { return static_cast<_Base1 &>(*this).__get(); }
};
+#elif COMPRESSED_PAIR_REV == 1
+template <class _ToPad> class __compressed_pair_padding {
+ char __padding_[(is_empty<_ToPad>::value && !__libcpp_is_final<_ToPad>::value)
+ ? 0
+ : sizeof(_ToPad) - __datasizeof(_ToPad)];
+};
+
+#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_;
+
+#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_;
+#elif COMPRESSED_PAIR_REV == 2
+#define _LLDB_COMPRESSED_PAIR(T1, Name1, T2, Name2) \
+ [[no_unique_address]] T1 Name1; \
+ [[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
+#endif
} // namespace __lldb
} // namespace std
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 98d2c7320003e4..afe6374e55a355 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
@@ -28,12 +28,13 @@ def _run_test(self, defines):
for v in [None, "ALTERNATE_LAYOUT"]:
for r in range(5):
- name = "test_r%d" % r
- defines = ["REVISION=%d" % r]
- if v:
- name += "_" + v
- defines += [v]
- f = functools.partialmethod(
- LibcxxStringDataFormatterSimulatorTestCase._run_test, defines
- )
- setattr(LibcxxStringDataFormatterSimulatorTestCase, name, f)
+ for c in range(3):
+ name = "test_r%d_c%d" % (r, c)
+ defines = ["REVISION=%d" % r, "COMPRESSED_PAIR_REV=%d" % c]
+ if v:
+ name += "_" + v
+ defines += [v]
+ f = functools.partialmethod(
+ LibcxxStringDataFormatterSimulatorTestCase._run_test, defines
+ )
+ setattr(LibcxxStringDataFormatterSimulatorTestCase, name, f)
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 b010dc25f8f804..f8fc13c10c4372 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
@@ -184,31 +184,50 @@ template <class _CharT, class _Traits, class _Allocator> class basic_string {
};
};
+ __long &getLongRep() {
+#if COMPRESSED_PAIR_REV == 0
+ return __r_.first().__l;
+#elif COMPRESSED_PAIR_REV <= 2
+ return __rep_.__l;
+#endif
+ }
+
+ __short &getShortRep() {
+#if COMPRESSED_PAIR_REV == 0
+ return __r_.first().__s;
+#elif COMPRESSED_PAIR_REV <= 2
+ return __rep_.__s;
+#endif
+ }
+
+#if COMPRESSED_PAIR_REV == 0
std::__lldb::__compressed_pair<__rep, allocator_type> __r_;
+#elif COMPRESSED_PAIR_REV <= 2
+ _LLDB_COMPRESSED_PAIR(__rep, __rep_, allocator_type, __alloc_);
+#endif
public:
template <size_t __N>
- basic_string(unsigned char __size, const value_type (&__data)[__N])
- : __r_({}, {}) {
+ basic_string(unsigned char __size, const value_type (&__data)[__N]) {
static_assert(__N < __min_cap, "");
#ifdef BITMASKS
- __r_.first().__s.__size_ = __size << __short_shift;
+ getShortRep().__size_ = __size << __short_shift;
#else
- __r_.first().__s.__size_ = __size;
- __r_.first().__s.__is_long_ = false;
+ getShortRep().__size_ = __size;
+ getShortRep().__is_long_ = false;
#endif
for (size_t __i = 0; __i < __N; ++__i)
- __r_.first().__s.__data_[__i] = __data[__i];
+ getShortRep().__data_[__i] = __data[__i];
}
- basic_string(size_t __cap, size_type __size, pointer __data) : __r_({}, {}) {
+ basic_string(size_t __cap, size_type __size, pointer __data) {
#ifdef BITMASKS
- __r_.first().__l.__cap_ = __cap | __long_mask;
+ getLongRep().__cap_ = __cap | __long_mask;
#else
- __r_.first().__l.__cap_ = __cap / __endian_factor;
- __r_.first().__l.__is_long_ = true;
+ getLongRep().__cap_ = __cap / __endian_factor;
+ getLongRep().__is_long_ = true;
#endif
- __r_.first().__l.__size_ = __size;
- __r_.first().__l.__data_ = __data;
+ getLongRep().__size_ = __size;
+ getLongRep().__data_ = __data;
}
};
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/TestDataFormatterLibcxxUniquePtrSimulator.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/TestDataFormatterLibcxxUniquePtrSimulator.py
index da780f54bfd374..0026eca8eebeae 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/TestDataFormatterLibcxxUniquePtrSimulator.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/TestDataFormatterLibcxxUniquePtrSimulator.py
@@ -7,13 +7,15 @@
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
+import functools
class LibcxxUniquePtrDataFormatterSimulatorTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
- def test(self):
- self.build()
+ def _run_test(self, defines):
+ cxxflags_extras = " ".join(["-D%s" % d for d in defines])
+ self.build(dictionary=dict(CXXFLAGS_EXTRAS=cxxflags_extras))
lldbutil.run_to_source_breakpoint(
self, "Break here", lldb.SBFileSpec("main.cpp")
)
@@ -22,3 +24,12 @@ def test(self):
self.expect(
"frame variable var_with_deleter_up", substrs=["pointer =", "deleter ="]
)
+
+
+for r in range(3):
+ name = "test_r%d" % r
+ defines = ["COMPRESSED_PAIR_REV=%d" % r]
+ f = functools.partialmethod(
+ LibcxxUniquePtrDataFormatterSimulatorTestCase._run_test, defines
+ )
+ setattr(LibcxxUniquePtrDataFormatterSimulatorTestCase, name, f)
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/main.cpp
index a6bfaa3febebb9..91a019566affbc 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/main.cpp
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx-simulators/unique_ptr/main.cpp
@@ -16,9 +16,14 @@ template <class _Tp, class _Dp = default_delete<_Tp>> class unique_ptr {
typedef _Dp deleter_type;
typedef _Tp *pointer;
+#if COMPRESSED_PAIR_REV == 0
std::__lldb::__compressed_pair<pointer, deleter_type> __ptr_;
explicit unique_ptr(pointer __p) noexcept
: __ptr_(__p, std::__lldb::__value_init_tag()) {}
+#elif COMPRESSED_PAIR_REV == 1 || COMPRESSED_PAIR_REV == 2
+ _LLDB_COMPRESSED_PAIR(pointer, __ptr_, deleter_type, __deleter_);
+ explicit unique_ptr(pointer __p) noexcept : __ptr_(__p), __deleter_() {}
+#endif
};
} // namespace __lldb
} // namespace std
|
b0ff984
to
d4af03e
Compare
This is a follow-up to #98330 for the upcoming
__compressed_pair
refactor in #93069This patch just adds the 2 new copies of
_LIBCPP_COMPRESSED_PAIR
layouts to the simulator tests.