Message ID | 20241209161401.1852965-1-jwakely@redhat.com |
---|---|
State | New |
Headers | show |
Series | libstdc++: Fix fancy pointer support in linked lists | expand |
diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h index f4a53bb4d7e..e650bbaa6de 100644 --- a/libstdc++-v3/include/bits/forward_list.h +++ b/libstdc++-v3/include/bits/forward_list.h @@ -425,6 +425,7 @@ namespace __fwdlist _Node(_Node&&) = delete; union { + unsigned char _M_uninit{}; #if ! _GLIBCXX_INLINE_VERSION // For ABI compatibility we need to overalign this member. alignas(__alignof__(value_type)) // XXX GLIBCXX_ABI Deprecated diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index 9f7d27242b6..ca9a2a1f0b9 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -291,6 +291,7 @@ namespace __list using _Node_ptr = __ptr_rebind<_ValPtr, _Node>; union { + unsigned char _M_uninit{}; value_type _M_data; }; diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr.cc index 621ff4c652c..e3bf8a13095 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr.cc @@ -59,6 +59,17 @@ struct Allocator template class std::forward_list<int, Allocator<int>>; +struct NonTrivial +{ + NonTrivial() { } + NonTrivial(const NonTrivial&) { } + ~NonTrivial() { } + bool operator==(const NonTrivial&) const { return true; } // for remove(T) + bool operator<(const NonTrivial&) const { return false; } // for sort() +}; + +template class std::forward_list<NonTrivial, Allocator<NonTrivial>>; + #include <testsuite_iterators.h> void diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/alloc_ptr.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/alloc_ptr.cc index d3b2cfe6d92..c52591b3cf8 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/alloc_ptr.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/alloc_ptr.cc @@ -57,6 +57,17 @@ struct Allocator template class std::list<int, Allocator<int>>; +struct NonTrivial +{ + NonTrivial() { } + NonTrivial(const NonTrivial&) { } + ~NonTrivial() { } + bool operator==(const NonTrivial&) const { return true; } // for remove(T) + bool operator<(const NonTrivial&) const { return false; } // for sort() +}; + +template class std::list<NonTrivial, Allocator<NonTrivial>>; + #include <testsuite_iterators.h> void