mirror of git://gcc.gnu.org/git/gcc.git
safe_iterator.h (_Safe_iterator<>::_M_constant()): Rename in...
2018-05-09 François Dumont <fdumont@gcc.gnu.org>
* include/debug/safe_iterator.h (_Safe_iterator<>::_M_constant()):
Rename in...
(_Safe_iterator<>::_S_constant()): ...that.
* include/debug/safe_local_iterator.h
(_Safe_local_iterator<>::_M_constant()): Rename in...
(_Safe_local_iterator<>::_S_constant()): ...that.
* include/debug/formatter.h: Remove bits/cpp_type_traits.h include.
(_Iterator_state::__rbegin): New.
(_Iterator_state::__rmiddle): New.
(_Iterator_state::__rend): New.
(_Parameter::_Parameter(const _Safe_iterator<>&, const char*,
_Is_iterator)): Use _Safe_iterator<>::_S_constant. Grab normal underlying
iterator type.
(_Parameter::_Parameter(const _Safe_local_iterator<>&, const char*,
_Is_iterator)): Likewise.
(_Parameter::_S_reverse_state(_Iterator_state)): New.
(_Parameter(__gnu_cxx::__normal_iterator<> const&, const char*,
_Is_iterator)): New.
(_Parameter(std::reverse_iterator<> const&, const char*,
_Is_iterator)): New.
(_Parameter(std::reverse_iterator<_Safe_iterator<>> const&,
const char*, _Is_iterator)): New.
(_Parameter(std::move_iterator<> const&, const char*, _Is_iterator):
New.
(_Parameter(std::move_iterator<_Safe_iterator<>> const&, const char*,
_Is_iterator)): New.
* testsuite/24_iterators/move_iterator/debug_neg.cc: New.
* testsuite/24_iterators/normal_iterator/debug_neg.cc: New.
* testsuite/24_iterators/reverse_iterator/debug_neg.cc: New.
From-SVN: r260093
This commit is contained in:
parent
bb6cb6e3e2
commit
6c882d0fdc
|
|
@ -1,3 +1,35 @@
|
||||||
|
2018-05-09 François Dumont <fdumont@gcc.gnu.org>
|
||||||
|
|
||||||
|
* include/debug/safe_iterator.h (_Safe_iterator<>::_M_constant()):
|
||||||
|
Rename in...
|
||||||
|
(_Safe_iterator<>::_S_constant()): ...that.
|
||||||
|
* include/debug/safe_local_iterator.h
|
||||||
|
(_Safe_local_iterator<>::_M_constant()): Rename in...
|
||||||
|
(_Safe_local_iterator<>::_S_constant()): ...that.
|
||||||
|
* include/debug/formatter.h: Remove bits/cpp_type_traits.h include.
|
||||||
|
(_Iterator_state::__rbegin): New.
|
||||||
|
(_Iterator_state::__rmiddle): New.
|
||||||
|
(_Iterator_state::__rend): New.
|
||||||
|
(_Parameter::_Parameter(const _Safe_iterator<>&, const char*,
|
||||||
|
_Is_iterator)): Use _Safe_iterator<>::_S_constant. Grab normal underlying
|
||||||
|
iterator type.
|
||||||
|
(_Parameter::_Parameter(const _Safe_local_iterator<>&, const char*,
|
||||||
|
_Is_iterator)): Likewise.
|
||||||
|
(_Parameter::_S_reverse_state(_Iterator_state)): New.
|
||||||
|
(_Parameter(__gnu_cxx::__normal_iterator<> const&, const char*,
|
||||||
|
_Is_iterator)): New.
|
||||||
|
(_Parameter(std::reverse_iterator<> const&, const char*,
|
||||||
|
_Is_iterator)): New.
|
||||||
|
(_Parameter(std::reverse_iterator<_Safe_iterator<>> const&,
|
||||||
|
const char*, _Is_iterator)): New.
|
||||||
|
(_Parameter(std::move_iterator<> const&, const char*, _Is_iterator):
|
||||||
|
New.
|
||||||
|
(_Parameter(std::move_iterator<_Safe_iterator<>> const&, const char*,
|
||||||
|
_Is_iterator)): New.
|
||||||
|
* testsuite/24_iterators/move_iterator/debug_neg.cc: New.
|
||||||
|
* testsuite/24_iterators/normal_iterator/debug_neg.cc: New.
|
||||||
|
* testsuite/24_iterators/reverse_iterator/debug_neg.cc: New.
|
||||||
|
|
||||||
2018-05-09 Jonathan Wakely <jwakely@redhat.com>
|
2018-05-09 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
* include/bits/std_function.h (_Base_manager::_M_get_pointer):
|
* include/bits/std_function.h (_Base_manager::_M_get_pointer):
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
#define _GLIBCXX_DEBUG_FORMATTER_H 1
|
#define _GLIBCXX_DEBUG_FORMATTER_H 1
|
||||||
|
|
||||||
#include <bits/c++config.h>
|
#include <bits/c++config.h>
|
||||||
#include <bits/cpp_type_traits.h>
|
|
||||||
|
|
||||||
#if __cpp_rtti
|
#if __cpp_rtti
|
||||||
# include <typeinfo>
|
# include <typeinfo>
|
||||||
|
|
@ -43,6 +42,31 @@ namespace std
|
||||||
# define _GLIBCXX_TYPEID(_Type) 0
|
# define _GLIBCXX_TYPEID(_Type) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
namespace __gnu_cxx
|
||||||
|
{
|
||||||
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
|
template<typename _Iterator, typename _Container>
|
||||||
|
class __normal_iterator;
|
||||||
|
|
||||||
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
|
template<typename _Iterator>
|
||||||
|
class reverse_iterator;
|
||||||
|
|
||||||
|
template<typename _Iterator>
|
||||||
|
class move_iterator;
|
||||||
|
|
||||||
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace __gnu_debug
|
namespace __gnu_debug
|
||||||
{
|
{
|
||||||
using std::type_info;
|
using std::type_info;
|
||||||
|
|
@ -157,6 +181,9 @@ namespace __gnu_debug
|
||||||
__middle, // dereferenceable, not at the beginning
|
__middle, // dereferenceable, not at the beginning
|
||||||
__end, // past-the-end, may be at beginning if sequence empty
|
__end, // past-the-end, may be at beginning if sequence empty
|
||||||
__before_begin, // before begin
|
__before_begin, // before begin
|
||||||
|
__rbegin, // dereferenceable, and at the reverse-beginning
|
||||||
|
__rmiddle, // reverse-dereferenceable, not at the reverse-beginning
|
||||||
|
__rend, // reverse-past-the-end
|
||||||
__last_state
|
__last_state
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -243,11 +270,9 @@ namespace __gnu_debug
|
||||||
{
|
{
|
||||||
_M_variant._M_iterator._M_name = __name;
|
_M_variant._M_iterator._M_name = __name;
|
||||||
_M_variant._M_iterator._M_address = std::__addressof(__it);
|
_M_variant._M_iterator._M_address = std::__addressof(__it);
|
||||||
_M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
|
_M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator);
|
||||||
_M_variant._M_iterator._M_constness =
|
_M_variant._M_iterator._M_constness =
|
||||||
std::__are_same<_Safe_iterator<_Iterator, _Sequence>,
|
__it._S_constant() ? __const_iterator : __mutable_iterator;
|
||||||
typename _Sequence::iterator>::
|
|
||||||
__value ? __mutable_iterator : __const_iterator;
|
|
||||||
_M_variant._M_iterator._M_sequence = __it._M_get_sequence();
|
_M_variant._M_iterator._M_sequence = __it._M_get_sequence();
|
||||||
_M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
|
_M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
|
||||||
|
|
||||||
|
|
@ -273,11 +298,10 @@ namespace __gnu_debug
|
||||||
{
|
{
|
||||||
_M_variant._M_iterator._M_name = __name;
|
_M_variant._M_iterator._M_name = __name;
|
||||||
_M_variant._M_iterator._M_address = std::__addressof(__it);
|
_M_variant._M_iterator._M_address = std::__addressof(__it);
|
||||||
_M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
|
_M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator);
|
||||||
_M_variant._M_iterator._M_constness =
|
_M_variant._M_iterator._M_constness =
|
||||||
std::__are_same<_Safe_local_iterator<_Iterator, _Sequence>,
|
_M_variant._M_iterator._M_constness =
|
||||||
typename _Sequence::local_iterator>::
|
__it._S_constant() ? __const_iterator : __mutable_iterator;
|
||||||
__value ? __mutable_iterator : __const_iterator;
|
|
||||||
_M_variant._M_iterator._M_sequence = __it._M_get_sequence();
|
_M_variant._M_iterator._M_sequence = __it._M_get_sequence();
|
||||||
_M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
|
_M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence);
|
||||||
|
|
||||||
|
|
@ -334,6 +358,74 @@ namespace __gnu_debug
|
||||||
_M_variant._M_iterator._M_seq_type = 0;
|
_M_variant._M_iterator._M_seq_type = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
// The following constructors are only defined in C++11 to take
|
||||||
|
// advantage of the constructor delegation feature.
|
||||||
|
template<typename _Iterator, typename _Container>
|
||||||
|
_Parameter(
|
||||||
|
__gnu_cxx::__normal_iterator<_Iterator, _Container> const& __it,
|
||||||
|
const char* __name, _Is_iterator)
|
||||||
|
: _Parameter(__it.base(), __name, _Is_iterator{})
|
||||||
|
{ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); }
|
||||||
|
|
||||||
|
template<typename _Iterator>
|
||||||
|
_Parameter(std::reverse_iterator<_Iterator> const& __it,
|
||||||
|
const char* __name, _Is_iterator)
|
||||||
|
: _Parameter(__it.base(), __name, _Is_iterator{})
|
||||||
|
{
|
||||||
|
_M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it);
|
||||||
|
_M_variant._M_iterator._M_state
|
||||||
|
= _S_reverse_state(_M_variant._M_iterator._M_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename _Iterator, typename _Sequence>
|
||||||
|
_Parameter(std::reverse_iterator<_Safe_iterator<_Iterator,
|
||||||
|
_Sequence>> const& __it,
|
||||||
|
const char* __name, _Is_iterator)
|
||||||
|
: _Parameter(__it.base(), __name, _Is_iterator{})
|
||||||
|
{
|
||||||
|
_M_variant._M_iterator._M_type
|
||||||
|
= _GLIBCXX_TYPEID(std::reverse_iterator<_Iterator>);
|
||||||
|
_M_variant._M_iterator._M_state
|
||||||
|
= _S_reverse_state(_M_variant._M_iterator._M_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename _Iterator>
|
||||||
|
_Parameter(std::move_iterator<_Iterator> const& __it,
|
||||||
|
const char* __name, _Is_iterator)
|
||||||
|
: _Parameter(__it.base(), __name, _Is_iterator{})
|
||||||
|
{ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); }
|
||||||
|
|
||||||
|
template<typename _Iterator, typename _Sequence>
|
||||||
|
_Parameter(std::move_iterator<_Safe_iterator<_Iterator,
|
||||||
|
_Sequence>> const& __it,
|
||||||
|
const char* __name, _Is_iterator)
|
||||||
|
: _Parameter(__it.base(), __name, _Is_iterator{})
|
||||||
|
{
|
||||||
|
_M_variant._M_iterator._M_type
|
||||||
|
= _GLIBCXX_TYPEID(std::move_iterator<_Iterator>);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
_Iterator_state
|
||||||
|
_S_reverse_state(_Iterator_state __state)
|
||||||
|
{
|
||||||
|
switch (__state)
|
||||||
|
{
|
||||||
|
case __begin:
|
||||||
|
return __rend;
|
||||||
|
case __middle:
|
||||||
|
return __rmiddle;
|
||||||
|
case __end:
|
||||||
|
return __rbegin;
|
||||||
|
default:
|
||||||
|
return __state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename _Sequence>
|
template<typename _Sequence>
|
||||||
_Parameter(const _Safe_sequence<_Sequence>& __seq,
|
_Parameter(const _Safe_sequence<_Sequence>& __seq,
|
||||||
const char* __name, _Is_sequence)
|
const char* __name, _Is_sequence)
|
||||||
|
|
|
||||||
|
|
@ -91,11 +91,6 @@ namespace __gnu_debug
|
||||||
typedef _Safe_iterator_base _Safe_base;
|
typedef _Safe_iterator_base _Safe_base;
|
||||||
typedef typename _Sequence::const_iterator _Const_iterator;
|
typedef typename _Sequence::const_iterator _Const_iterator;
|
||||||
|
|
||||||
/// Determine if this is a constant iterator.
|
|
||||||
bool
|
|
||||||
_M_constant() const
|
|
||||||
{ return std::__are_same<_Const_iterator, _Safe_iterator>::__value; }
|
|
||||||
|
|
||||||
typedef std::iterator_traits<_Iterator> _Traits;
|
typedef std::iterator_traits<_Iterator> _Traits;
|
||||||
|
|
||||||
struct _Attach_single
|
struct _Attach_single
|
||||||
|
|
@ -127,7 +122,7 @@ namespace __gnu_debug
|
||||||
*/
|
*/
|
||||||
_Safe_iterator(const _Iterator& __i, const _Safe_sequence_base* __seq)
|
_Safe_iterator(const _Iterator& __i, const _Safe_sequence_base* __seq)
|
||||||
_GLIBCXX_NOEXCEPT
|
_GLIBCXX_NOEXCEPT
|
||||||
: _Iter_base(__i), _Safe_base(__seq, _M_constant())
|
: _Iter_base(__i), _Safe_base(__seq, _S_constant())
|
||||||
{
|
{
|
||||||
_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
|
_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
|
||||||
_M_message(__msg_init_singular)
|
_M_message(__msg_init_singular)
|
||||||
|
|
@ -396,6 +391,12 @@ namespace __gnu_debug
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------ Utilities ------
|
// ------ Utilities ------
|
||||||
|
|
||||||
|
/// Determine if this is a constant iterator.
|
||||||
|
static bool
|
||||||
|
_S_constant()
|
||||||
|
{ return std::__are_same<_Const_iterator, _Safe_iterator>::__value; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return the underlying iterator
|
* @brief Return the underlying iterator
|
||||||
*/
|
*/
|
||||||
|
|
@ -414,12 +415,12 @@ namespace __gnu_debug
|
||||||
/** Attach iterator to the given sequence. */
|
/** Attach iterator to the given sequence. */
|
||||||
void
|
void
|
||||||
_M_attach(_Safe_sequence_base* __seq)
|
_M_attach(_Safe_sequence_base* __seq)
|
||||||
{ _Safe_base::_M_attach(__seq, _M_constant()); }
|
{ _Safe_base::_M_attach(__seq, _S_constant()); }
|
||||||
|
|
||||||
/** Likewise, but not thread-safe. */
|
/** Likewise, but not thread-safe. */
|
||||||
void
|
void
|
||||||
_M_attach_single(_Safe_sequence_base* __seq)
|
_M_attach_single(_Safe_sequence_base* __seq)
|
||||||
{ _Safe_base::_M_attach_single(__seq, _M_constant()); }
|
{ _Safe_base::_M_attach_single(__seq, _S_constant()); }
|
||||||
|
|
||||||
/// Is the iterator dereferenceable?
|
/// Is the iterator dereferenceable?
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -54,14 +54,6 @@ namespace __gnu_debug
|
||||||
typedef typename _Sequence::const_local_iterator _Const_local_iterator;
|
typedef typename _Sequence::const_local_iterator _Const_local_iterator;
|
||||||
typedef typename _Sequence::size_type size_type;
|
typedef typename _Sequence::size_type size_type;
|
||||||
|
|
||||||
/// Determine if this is a constant iterator.
|
|
||||||
bool
|
|
||||||
_M_constant() const
|
|
||||||
{
|
|
||||||
return std::__are_same<_Const_local_iterator,
|
|
||||||
_Safe_local_iterator>::__value;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef std::iterator_traits<_Iterator> _Traits;
|
typedef std::iterator_traits<_Iterator> _Traits;
|
||||||
|
|
||||||
struct _Attach_single
|
struct _Attach_single
|
||||||
|
|
@ -92,7 +84,7 @@ namespace __gnu_debug
|
||||||
*/
|
*/
|
||||||
_Safe_local_iterator(const _Iterator& __i,
|
_Safe_local_iterator(const _Iterator& __i,
|
||||||
const _Safe_sequence_base* __cont)
|
const _Safe_sequence_base* __cont)
|
||||||
: _Iter_base(__i), _Safe_base(__cont, _M_constant())
|
: _Iter_base(__i), _Safe_base(__cont, _S_constant())
|
||||||
{
|
{
|
||||||
_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
|
_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
|
||||||
_M_message(__msg_init_singular)
|
_M_message(__msg_init_singular)
|
||||||
|
|
@ -278,6 +270,15 @@ namespace __gnu_debug
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------ Utilities ------
|
// ------ Utilities ------
|
||||||
|
|
||||||
|
/// Determine if this is a constant iterator.
|
||||||
|
static bool
|
||||||
|
_S_constant()
|
||||||
|
{
|
||||||
|
return std::__are_same<_Const_local_iterator,
|
||||||
|
_Safe_local_iterator>::__value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return the underlying iterator
|
* @brief Return the underlying iterator
|
||||||
*/
|
*/
|
||||||
|
|
@ -302,12 +303,12 @@ namespace __gnu_debug
|
||||||
/** Attach iterator to the given sequence. */
|
/** Attach iterator to the given sequence. */
|
||||||
void
|
void
|
||||||
_M_attach(_Safe_sequence_base* __seq)
|
_M_attach(_Safe_sequence_base* __seq)
|
||||||
{ _Safe_base::_M_attach(__seq, _M_constant()); }
|
{ _Safe_base::_M_attach(__seq, _S_constant()); }
|
||||||
|
|
||||||
/** Likewise, but not thread-safe. */
|
/** Likewise, but not thread-safe. */
|
||||||
void
|
void
|
||||||
_M_attach_single(_Safe_sequence_base* __seq)
|
_M_attach_single(_Safe_sequence_base* __seq)
|
||||||
{ _Safe_base::_M_attach_single(__seq, _M_constant()); }
|
{ _Safe_base::_M_attach_single(__seq, _S_constant()); }
|
||||||
|
|
||||||
/// Is the iterator dereferenceable?
|
/// Is the iterator dereferenceable?
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -720,7 +720,10 @@ namespace
|
||||||
"dereferenceable (start-of-sequence)",
|
"dereferenceable (start-of-sequence)",
|
||||||
"dereferenceable",
|
"dereferenceable",
|
||||||
"past-the-end",
|
"past-the-end",
|
||||||
"before-begin"
|
"before-begin",
|
||||||
|
"dereferenceable (start-of-reverse-sequence)",
|
||||||
|
"dereferenceable (reverse)",
|
||||||
|
"past-the-reverse-end"
|
||||||
};
|
};
|
||||||
print_word(ctx, state_names[iterator._M_state]);
|
print_word(ctx, state_names[iterator._M_state]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
// { dg-do run { target c++11 xfail *-*-* } }
|
||||||
|
|
||||||
|
// Copyright (C) 2018 Free Software Foundation, Inc.
|
||||||
|
//
|
||||||
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
// terms of the GNU General Public License as published by the
|
||||||
|
// Free Software Foundation; either version 3, or (at your option)
|
||||||
|
// any later version.
|
||||||
|
|
||||||
|
// 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/>.
|
||||||
|
|
||||||
|
#include <debug/vector>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
void test01()
|
||||||
|
{
|
||||||
|
__gnu_debug::vector<int> vals { 0, 1, 2, 3 };
|
||||||
|
__gnu_debug::vector<int> mval(std::make_move_iterator(vals.begin() + 1),
|
||||||
|
std::make_move_iterator(vals.begin()));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test01();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright (C) 2018 Free Software Foundation, Inc.
|
||||||
|
//
|
||||||
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
// terms of the GNU General Public License as published by the
|
||||||
|
// Free Software Foundation; either version 3, or (at your option)
|
||||||
|
// any later version.
|
||||||
|
|
||||||
|
// 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/>.
|
||||||
|
|
||||||
|
// Requires C++11 because we check for correct output of
|
||||||
|
// __gnu_cxx::__normal_iterator which is improved in this mode.
|
||||||
|
// { dg-do run { target c++11 xfail *-*-* } }
|
||||||
|
|
||||||
|
#include <debug/vector>
|
||||||
|
|
||||||
|
void test01()
|
||||||
|
{
|
||||||
|
std::vector<int> vals { 0, 1, 2, 3 };
|
||||||
|
__gnu_debug::vector<int> vals2(vals.begin() + 1, vals.begin());
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test01();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright (C) 2018 Free Software Foundation, Inc.
|
||||||
|
//
|
||||||
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
// terms of the GNU General Public License as published by the
|
||||||
|
// Free Software Foundation; either version 3, or (at your option)
|
||||||
|
// any later version.
|
||||||
|
|
||||||
|
// 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/>.
|
||||||
|
|
||||||
|
// Requires C++11 because we check for correct output of
|
||||||
|
// std::reverse_iterator which is improved only in this mode.
|
||||||
|
// { dg-do run { target c++11 xfail *-*-* } }
|
||||||
|
|
||||||
|
#include <debug/vector>
|
||||||
|
|
||||||
|
void test01()
|
||||||
|
{
|
||||||
|
__gnu_debug::vector<int> vals { 0, 1, 2, 3 };
|
||||||
|
__gnu_debug::vector<int> vals2(vals.rend(), vals.rbegin());
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test01();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue