diff options
author | Xinliang David Li <davidxl@google.com> | 2011-11-07 07:43:46 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@gcc.gnu.org> | 2011-11-07 07:43:46 +0000 |
commit | b9b8c6ae3902b5ce95a5be7368068ce9092cf4c4 (patch) | |
tree | 0b7fa6e4b7ade15d01a90d893bbbb7b6b7ef36a7 | |
parent | e97764b893b1ff42f7197d26583c15028c41c06e (diff) | |
download | gcc-b9b8c6ae3902b5ce95a5be7368068ce9092cf4c4.zip gcc-b9b8c6ae3902b5ce95a5be7368068ce9092cf4c4.tar.gz gcc-b9b8c6ae3902b5ce95a5be7368068ce9092cf4c4.tar.bz2 |
make __stl_prime_list in comdat
From-SVN: r181071
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/backward/hashtable.h | 26 |
2 files changed, 27 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7d3fd02..299bee9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2011-11-07 Xinliang David Li <davidxl@google.com> + + * include/backward/hashtable.h: Make __stl_prime_list + in comdat section. + 2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com> * include/bits/basic_string.h (basic_string::at): Move adjacent to other diff --git a/libstdc++-v3/include/backward/hashtable.h b/libstdc++-v3/include/backward/hashtable.h index 91b0c60..dbba097 100644 --- a/libstdc++-v3/include/backward/hashtable.h +++ b/libstdc++-v3/include/backward/hashtable.h @@ -209,7 +209,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Note: assumes long is at least 32 bits. enum { _S_num_primes = 29 }; - static const unsigned long __stl_prime_list[_S_num_primes] = + template<typename _PrimeType> + struct _Hashtable_prime_list + { + static const _PrimeType __stl_prime_list[_S_num_primes]; + + static const _PrimeType* + _S_get_prime_list(); + }; + + template<typename _PrimeType> const _PrimeType + _Hashtable_prime_list<_PrimeType>::__stl_prime_list[_S_num_primes] = { 5ul, 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, @@ -219,11 +229,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul }; + template<class _PrimeType> inline const _PrimeType* + _Hashtable_prime_list<_PrimeType>::_S_get_prime_list() + { + return __stl_prime_list; + } + inline unsigned long __stl_next_prime(unsigned long __n) { - const unsigned long* __first = __stl_prime_list; - const unsigned long* __last = __stl_prime_list + (int)_S_num_primes; + const unsigned long* __first = _Hashtable_prime_list<unsigned long>::_S_get_prime_list(); + const unsigned long* __last = __first + (int)_S_num_primes; const unsigned long* pos = std::lower_bound(__first, __last, __n); return pos == __last ? *(__last - 1) : *pos; } @@ -417,7 +433,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_type max_bucket_count() const - { return __stl_prime_list[(int)_S_num_primes - 1]; } + { return _Hashtable_prime_list<unsigned long>:: + _S_get_prime_list()[(int)_S_num_primes - 1]; + } size_type elems_in_bucket(size_type __bucket) const |