re PR libstdc++/61347 (std::distance(list.first(),list.end()) in O(1))
2014-10-13 Marc Glisse <marc.glisse@inria.fr> PR libstdc++/61347 PR libstdc++/63345 * include/bits/list.tcc (_List_base::_M_clear()): Delay cast so it isn't done for the sentinel. * include/bits/stl_list.h (_List_base::_M_size): Move... (_List_base::_List_impl::_M_node): ... here. (_List_base::_M_get_size(), _List_base::_M_set_size(size_t), _List_base::_M_inc_size(size_t), _List_base::_M_dec_size(size_t), _List_base::_M_node_count): Adapt to the move. * 23_containers/list/requirements/dr438/assign_neg.cc: Update line number. * 23_containers/list/requirements/dr438/constructor_1_neg.cc: Likewise. * 23_containers/list/requirements/dr438/constructor_2_neg.cc: Likewise. * 23_containers/list/requirements/dr438/insert_neg.cc: Likewise. From-SVN: r216142
This commit is contained in:
parent
e7da0c235e
commit
2a52738350
@ -1,3 +1,20 @@
|
||||
2014-10-13 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
PR libstdc++/61347
|
||||
PR libstdc++/63345
|
||||
* include/bits/list.tcc (_List_base::_M_clear()): Delay cast so it
|
||||
isn't done for the sentinel.
|
||||
* include/bits/stl_list.h (_List_base::_M_size): Move...
|
||||
(_List_base::_List_impl::_M_node): ... here.
|
||||
(_List_base::_M_get_size(), _List_base::_M_set_size(size_t),
|
||||
_List_base::_M_inc_size(size_t), _List_base::_M_dec_size(size_t),
|
||||
_List_base::_M_node_count): Adapt to the move.
|
||||
* 23_containers/list/requirements/dr438/assign_neg.cc: Update
|
||||
line number.
|
||||
* 23_containers/list/requirements/dr438/constructor_1_neg.cc: Likewise.
|
||||
* 23_containers/list/requirements/dr438/constructor_2_neg.cc: Likewise.
|
||||
* 23_containers/list/requirements/dr438/insert_neg.cc: Likewise.
|
||||
|
||||
2014-10-10 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* testsuite/Makefile.in: Regenerate.
|
||||
|
@ -66,11 +66,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
_M_clear() _GLIBCXX_NOEXCEPT
|
||||
{
|
||||
typedef _List_node<_Tp> _Node;
|
||||
_Node* __cur = static_cast<_Node*>(_M_impl._M_node._M_next);
|
||||
__detail::_List_node_base* __cur = _M_impl._M_node._M_next;
|
||||
while (__cur != &_M_impl._M_node)
|
||||
{
|
||||
_Node* __tmp = __cur;
|
||||
__cur = static_cast<_Node*>(__cur->_M_next);
|
||||
_Node* __tmp = static_cast<_Node*>(__cur);
|
||||
__cur = __tmp->_M_next;
|
||||
#if __cplusplus >= 201103L
|
||||
_M_get_Node_allocator().destroy(__tmp);
|
||||
#else
|
||||
|
@ -332,7 +332,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
struct _List_impl
|
||||
: public _Node_alloc_type
|
||||
{
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
_List_node<size_t> _M_node;
|
||||
#else
|
||||
__detail::_List_node_base _M_node;
|
||||
#endif
|
||||
|
||||
_List_impl()
|
||||
: _Node_alloc_type(), _M_node()
|
||||
@ -352,15 +356,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
_List_impl _M_impl;
|
||||
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
size_t _M_size;
|
||||
size_t _M_get_size() const { return _M_impl._M_node._M_data; }
|
||||
|
||||
size_t _M_get_size() const { return _M_size; }
|
||||
void _M_set_size(size_t __n) { _M_impl._M_node._M_data = __n; }
|
||||
|
||||
void _M_set_size(size_t __n) { _M_size = __n; }
|
||||
void _M_inc_size(size_t __n) { _M_impl._M_node._M_data += __n; }
|
||||
|
||||
void _M_inc_size(size_t __n) { _M_size += __n; }
|
||||
|
||||
void _M_dec_size(size_t __n) { _M_size -= __n; }
|
||||
void _M_dec_size(size_t __n) { _M_impl._M_node._M_data -= __n; }
|
||||
|
||||
size_t
|
||||
_M_distance(const __detail::_List_node_base* __first,
|
||||
@ -368,7 +370,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
{ return _S_distance(__first, __last); }
|
||||
|
||||
// return the stored size
|
||||
size_t _M_node_count() const { return _M_size; }
|
||||
size_t _M_node_count() const { return _M_impl._M_node._M_data; }
|
||||
#else
|
||||
// dummy implementations used when the size is not stored
|
||||
size_t _M_get_size() const { return 0; }
|
||||
|
@ -18,7 +18,7 @@
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1728 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1730 }
|
||||
|
||||
#include <list>
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1680 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1682 }
|
||||
|
||||
#include <list>
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1680 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1682 }
|
||||
|
||||
#include <list>
|
||||
#include <utility>
|
||||
|
@ -18,7 +18,7 @@
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1680 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1682 }
|
||||
|
||||
#include <list>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user