===================================================================
@@ -59,25 +59,25 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
void
_List_base<_Tp, _Alloc>::
_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
_M_get_Tp_allocator().destroy(std::__addressof(__tmp->_M_data));
#endif
_M_put_node(__tmp);
}
}
#if __cplusplus >= 201103L
===================================================================
@@ -325,57 +325,59 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
__first = __first->_M_next;
++__n;
}
return __n;
}
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()
{ }
_List_impl(const _Node_alloc_type& __a) _GLIBCXX_NOEXCEPT
: _Node_alloc_type(__a), _M_node()
{ }
#if __cplusplus >= 201103L
_List_impl(_Node_alloc_type&& __a) _GLIBCXX_NOEXCEPT
: _Node_alloc_type(std::move(__a)), _M_node()
{ }
#endif
};
_List_impl _M_impl;
#if _GLIBCXX_USE_CXX11_ABI
- size_t _M_size;
-
- size_t _M_get_size() const { return _M_size; }
+ size_t _M_get_size() const { return _M_impl._M_node._M_data; }
- void _M_set_size(size_t __n) { _M_size = __n; }
+ void _M_set_size(size_t __n) { _M_impl._M_node._M_data = __n; }
- void _M_inc_size(size_t __n) { _M_size += __n; }
+ void _M_inc_size(size_t __n) { _M_impl._M_node._M_data += __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,
const __detail::_List_node_base* __last) const
{ 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; }
void _M_set_size(size_t) { }
void _M_inc_size(size_t) { }
void _M_dec_size(size_t) { }
size_t _M_distance(const void*, const void*) const { return 0; }
// count the number of nodes
size_t _M_node_count() const
===================================================================
@@ -11,21 +11,21 @@
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1728 }
+// { dg-error "no matching" "" { target *-*-* } 1730 }
#include <list>
struct A
{
explicit A(int) { }
};
void f()
{
===================================================================
@@ -11,19 +11,19 @@
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1680 }
+// { dg-error "no matching" "" { target *-*-* } 1682 }
#include <list>
void f()
{
typedef std::list<std::list<int> > list_type;
list_type l(10, 1);
}
===================================================================
@@ -11,20 +11,20 @@
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1680 }
+// { dg-error "no matching" "" { target *-*-* } 1682 }
#include <list>
#include <utility>
void f()
{
typedef std::list<std::list<std::pair<char, char> > > list_type;
list_type l('a', 'b');
}
===================================================================
@@ -11,21 +11,21 @@
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1680 }
+// { dg-error "no matching" "" { target *-*-* } 1682 }
#include <list>
struct A
{
explicit A(int) { }
};
void f()
{