From: Marcus Meissner Date: Sat, 1 Jun 2002 00:51:22 +0000 (+0000) Subject: re PR libstdc++/6886 (bit vector iterator uses wrong 1 constant) X-Git-Tag: releases/gcc-3.1.1~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f76626756552786f68d80de4a5054252b38597ea;p=thirdparty%2Fgcc.git re PR libstdc++/6886 (bit vector iterator uses wrong 1 constant) 2002-05-31 Marcus Meissner PR libstdc++/6886 * include/bits/stl_bvector.h: Use UL suffix for unsigned longs. * testsuite/23_containers/vector_bool.cc (test02): New test. From-SVN: r54130 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0c0688ae804d..9a12fd3bc845 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2002-05-31 Marcus Meissner + + PR libstdc++/6886 + * include/bits/stl_bvector.h: Use UL suffix for unsigned longs. + * testsuite/23_containers/vector_bool.cc (test02): New test. + 2002-05-31 John David Anglin * config/os/gnu-linux/bits/os_defines.h (__glibcpp_long_bits): Define @@ -5,6 +11,7 @@ (__glibcpp_long_double_bits): Define to 64 for all hppa ports. 2002-05-30 Marc Espie + * configure.in: Always check for sys/types.h. * configure: Regenerate. diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 6cb6d9caf36f..e48ad7d63fda 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -166,7 +166,7 @@ struct _Bit_iterator : public _Bit_iterator_base _Bit_iterator(_Bit_type * __x, unsigned int __y) : _Bit_iterator_base(__x, __y) {} - reference operator*() const { return reference(_M_p, 1U << _M_offset); } + reference operator*() const { return reference(_M_p, 1UL << _M_offset); } iterator& operator++() { _M_bump_up(); return *this; @@ -223,7 +223,7 @@ struct _Bit_const_iterator : public _Bit_iterator_base : _Bit_iterator_base(__x._M_p, __x._M_offset) {} const_reference operator*() const { - return _Bit_reference(_M_p, 1U << _M_offset); + return _Bit_reference(_M_p, 1UL << _M_offset); } const_iterator& operator++() { _M_bump_up(); diff --git a/libstdc++-v3/testsuite/23_containers/vector_bool.cc b/libstdc++-v3/testsuite/23_containers/vector_bool.cc index 820bbaca54f4..17d63d1f8543 100644 --- a/libstdc++-v3/testsuite/23_containers/vector_bool.cc +++ b/libstdc++-v3/testsuite/23_containers/vector_bool.cc @@ -29,8 +29,32 @@ void test01() ++i; } +// libstdc++/6886 +void test02() +{ + typedef std::vector bvec; + int i, num = 0; + bvec v; + + v.resize(66); + + for (i = 0 ; i < 66 ; ++i) + v[i] = 0; + + v[1] = 1; + v[33] = 1; + v[49] = 1; + v[65] = 1; + + for (bvec::iterator j = v.begin() ; j != v.end() ; j++) + if (bool(*j)) ++num; + + VERIFY( num == 4 ); +} + int main() { test01(); + test02(); return 0; }