diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-06-02 12:34:48 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-06-02 13:33:41 +0100 |
commit | f8f0193b5b83f6e85d65015e79c803295baf5166 (patch) | |
tree | 8657a3e30e0510caacd21163196d3098385b0e23 /libstdc++-v3 | |
parent | 81eab204a56dcd8acb1ca5d7df277437ca07b51a (diff) | |
download | gcc-f8f0193b5b83f6e85d65015e79c803295baf5166.zip gcc-f8f0193b5b83f6e85d65015e79c803295baf5166.tar.gz gcc-f8f0193b5b83f6e85d65015e79c803295baf5166.tar.bz2 |
libstdc++: Value-initialize objects held by EBO helpers [PR 100863]
The allocator, hash function and equality function should all be
value-initialized by the default constructor of an unordered container.
Do it in the EBO helper, so we don't have to get it right in multiple
places.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
PR libstdc++/100863
PR libstdc++/65816
* include/bits/hashtable_policy.h (_Hashtable_ebo_helper):
Value-initialize subobject.
* testsuite/23_containers/unordered_map/allocator/default_init.cc:
Remove XFAIL.
* testsuite/23_containers/unordered_set/allocator/default_init.cc:
Remove XFAIL.
Diffstat (limited to 'libstdc++-v3')
3 files changed, 4 insertions, 4 deletions
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index 1090a39..2130c95 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -1162,7 +1162,7 @@ namespace __detail struct _Hashtable_ebo_helper<_Nm, _Tp, true> : private _Tp { - _Hashtable_ebo_helper() = default; + _Hashtable_ebo_helper() noexcept(noexcept(_Tp())) : _Tp() { } template<typename _OtherTp> _Hashtable_ebo_helper(_OtherTp&& __tp) @@ -1188,7 +1188,7 @@ namespace __detail _Tp& _M_get() { return _M_tp; } private: - _Tp _M_tp; + _Tp _M_tp{}; }; /** @@ -1246,6 +1246,7 @@ namespace __detail // We need the default constructor for the local iterators and _Hashtable // default constructor. _Hash_code_base() = default; + _Hash_code_base(const _Hash& __hash) : __ebo_hash(__hash) { } __hash_code @@ -1639,6 +1640,7 @@ namespace __detail protected: _Hashtable_base() = default; + _Hashtable_base(const _Hash& __hash, const _Equal& __eq) : __hash_code_base(__hash), _EqualEBO(__eq) { } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc index bbfd683..12f1163 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc @@ -17,7 +17,6 @@ // { dg-do run { target c++11 } } // { dg-options "-O0" } -// { dg-xfail-run-if "PR c++/65816" { *-*-* } } #include <unordered_map> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc index 6ee32d4..1ea6603 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc @@ -17,7 +17,6 @@ // { dg-do run { target c++11 } } // { dg-options "-O0" } -// { dg-xfail-run-if "PR c++/65816" { *-*-* } } #include <unordered_set> #include <testsuite_hooks.h> |