This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
libstdc++: more __intN tweaks
- From: DJ Delorie <dj at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Wed, 22 Jul 2015 22:26:38 -0400
- Subject: libstdc++: more __intN tweaks
- Authentication-results: sourceware.org; auth=none
Another place where a list of "all" types are explicitly listed, and
the __intN types need to be included, and elsewhere protection against
errors [-Wnarrowing] on targets that have small size_t. Ok?
* include/bits/functional_hash.h: Add specializations for __intN
types.
* include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp (__gnu_pbds):
Guard against values that might exceed size_t's precision.
Index: libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
===================================================================
--- libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp (revision 226081)
+++ libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp (working copy)
@@ -267,36 +267,45 @@ namespace __gnu_pbds
/* 18 */ 3571ul,
/* 19 */ 5777ul,
/* 20 */ 9349ul,
/* 21 */ 15126ul,
/* 22 */ 24476ul,
/* 23 */ 39602ul,
- /* 24 */ 64079ul,
+ /* 24 */ 64079ul
+#if __SIZE_MAX__ > 0xfffful
+ ,
/* 25 */ 103681ul,
/* 26 */ 167761ul,
/* 27 */ 271442ul,
/* 28 */ 439204ul,
- /* 29 */ 710646ul,
+ /* 29 */ 710646ul
+#if __SIZE_MAX__ > 0xffffful
+ ,
/* 30 */ 1149851ul,
/* 31 */ 1860497ul,
/* 32 */ 3010349ul,
/* 33 */ 4870846ul,
/* 34 */ 7881196ul,
- /* 35 */ 12752042ul,
+ /* 35 */ 12752042ul
+#if __SIZE_MAX__ > 0xfffffful
+ ,
/* 36 */ 20633239ul,
/* 37 */ 33385282ul,
/* 38 */ 54018521ul,
/* 39 */ 87403803ul,
/* 40 */ 141422324ul,
/* 41 */ 228826127ul,
/* 42 */ 370248451ul,
/* 43 */ 599074578ul,
/* 44 */ 969323029ul,
/* 45 */ 1568397607ul,
/* 46 */ 2537720636ul,
/* 47 */ 4106118243ul
+#endif
+#endif
+#endif
/* Pot's good, let's play */
};
#define PB_DS_ASSERT_NODE_CONSISTENT(_Node, _Bool) \
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(_Node, _Bool, \
__FILE__, __LINE__);)
Index: libstdc++-v3/include/bits/functional_hash.h
===================================================================
--- libstdc++-v3/include/bits/functional_hash.h (revision 226081)
+++ libstdc++-v3/include/bits/functional_hash.h (working copy)
@@ -118,12 +118,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Explicit specialization for unsigned long.
_Cxx_hashtable_define_trivial_hash(unsigned long)
/// Explicit specialization for unsigned long long.
_Cxx_hashtable_define_trivial_hash(unsigned long long)
+#ifdef __GLIBCXX_TYPE_INT_N_0
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0)
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_1
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1)
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1 unsigned)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_2
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2)
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2 unsigned)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_3
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3)
+ _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3 unsigned)
+#endif
+
#undef _Cxx_hashtable_define_trivial_hash
struct _Hash_impl
{
static size_t
hash(const void* __ptr, size_t __clength,