https://github.com/pcc updated https://github.com/llvm/llvm-project/pull/183223
>From 20718e13a5f9629918b04ffc0ac234fb1e6bec05 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne <[email protected]> Date: Tue, 24 Feb 2026 17:30:13 -0800 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.6-beta.1 --- libcxx/include/ext/hash_map | 18 +++++++----------- .../gnu/hash_map/non_standard_layout.pass.cpp | 17 +++++++++++++++++ .../hash_multimap/non_standard_layout.pass.cpp | 17 +++++++++++++++++ 3 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 libcxx/test/extensions/gnu/hash_map/non_standard_layout.pass.cpp create mode 100644 libcxx/test/extensions/gnu/hash_multimap/non_standard_layout.pass.cpp diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map index 09c981131ff96..7df44370df96b 100644 --- a/libcxx/include/ext/hash_map +++ b/libcxx/include/ext/hash_map @@ -426,12 +426,10 @@ public: typedef const value_type& const_reference; private: - typedef std::pair<key_type, mapped_type> __value_type; - typedef __hash_map_hasher<__value_type, hasher> __hasher; - typedef __hash_map_equal<__value_type, key_equal> __key_equal; - typedef std::__rebind_alloc<std::allocator_traits<allocator_type>, __value_type> __allocator_type; + typedef __hash_map_hasher<value_type, hasher> __hasher; + typedef __hash_map_equal<value_type, key_equal> __key_equal; - typedef std::__hash_table<__value_type, __hasher, __key_equal, __allocator_type> __table; + typedef std::__hash_table<value_type, __hasher, __key_equal, allocator_type> __table; __table __table_; @@ -577,7 +575,7 @@ typename hash_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder hash_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(const key_type& __k) { __node_allocator& __na = __table_.__node_alloc(); __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na)); - __node_traits::construct(__na, std::addressof(__h->__get_value().first), __k); + __node_traits::construct(__na, const_cast<_Key*>(std::addressof(__h->__get_value().first)), __k); __h.get_deleter().__first_constructed = true; __node_traits::construct(__na, std::addressof(__h->__get_value().second)); __h.get_deleter().__second_constructed = true; @@ -647,12 +645,10 @@ public: typedef const value_type& const_reference; private: - typedef std::pair<key_type, mapped_type> __value_type; - typedef __hash_map_hasher<__value_type, hasher> __hasher; - typedef __hash_map_equal<__value_type, key_equal> __key_equal; - typedef std::__rebind_alloc<std::allocator_traits<allocator_type>, __value_type> __allocator_type; + typedef __hash_map_hasher<value_type, hasher> __hasher; + typedef __hash_map_equal<value_type, key_equal> __key_equal; - typedef std::__hash_table<__value_type, __hasher, __key_equal, __allocator_type> __table; + typedef std::__hash_table<value_type, __hasher, __key_equal, allocator_type> __table; __table __table_; diff --git a/libcxx/test/extensions/gnu/hash_map/non_standard_layout.pass.cpp b/libcxx/test/extensions/gnu/hash_map/non_standard_layout.pass.cpp new file mode 100644 index 0000000000000..8ade04d1292a8 --- /dev/null +++ b/libcxx/test/extensions/gnu/hash_map/non_standard_layout.pass.cpp @@ -0,0 +1,17 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// ADDITIONAL_COMPILE_FLAGS: -Wno-deprecated + +#include <ext/hash_map> + +int main(int, char**) { + __gnu_cxx::hash_map<const char*, std::string> m; + auto it = m.insert(std::make_pair("foo", "bar")).first; + return it->first == nullptr; +} diff --git a/libcxx/test/extensions/gnu/hash_multimap/non_standard_layout.pass.cpp b/libcxx/test/extensions/gnu/hash_multimap/non_standard_layout.pass.cpp new file mode 100644 index 0000000000000..f206e2bfad0af --- /dev/null +++ b/libcxx/test/extensions/gnu/hash_multimap/non_standard_layout.pass.cpp @@ -0,0 +1,17 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// ADDITIONAL_COMPILE_FLAGS: -Wno-deprecated + +#include <ext/hash_map> + +int main(int, char**) { + __gnu_cxx::hash_multimap<const char*, std::string> m; + auto it = m.insert(std::make_pair("foo", "bar")); + return it->first == nullptr; +} _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
