re PR libstdc++/58191 (Can't use boost transform_iterator with _GLIBCXX_DEBUG)
authorFrançois Dumont <fdumont@gcc.gnu.org>
Fri, 30 Aug 2013 20:16:03 +0000 (20:16 +0000)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Fri, 30 Aug 2013 20:16:03 +0000 (20:16 +0000)
2013-08-30  François Dumont  <fdumont@gcc.gnu.org>

PR libstdc++/58191
* include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
__gnu_debug::__base calls on iterators passed to internal debug
check.
(__glibcxx_check_partitioned_lower_pred): Likewise.
(__glibcxx_check_partitioned_upper): Likewise.
(__glibcxx_check_partitioned_upper_pred): Likewise.
(__glibcxx_check_sorted): Likewise.
(__glibcxx_check_sorted_pred): Likewise.
(__glibcxx_check_sorted_set): Likewise.
(__glibcxx_check_sorted_set_pred): Likewise.
* include/debug/functions.h (__check_partitioned_lower):
Remove code to detect safe iterators.
(__check_partitioned_upper): Likewise.
(__check_sorted): Likewise.

From-SVN: r202119

libstdc++-v3/ChangeLog
libstdc++-v3/include/debug/functions.h
libstdc++-v3/include/debug/macros.h

index 90f68ae86bea99ac2cd54475846f1c580ab6a77e..c288313f10a036cc4b848ac0347c31d4556cba2d 100644 (file)
@@ -1,3 +1,21 @@
+2013-08-30  François Dumont  <fdumont@gcc.gnu.org>
+
+       PR libstdc++/58191
+       * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
+       __gnu_debug::__base calls on iterators passed to internal debug
+       check.
+       (__glibcxx_check_partitioned_lower_pred): Likewise.
+       (__glibcxx_check_partitioned_upper): Likewise.
+       (__glibcxx_check_partitioned_upper_pred): Likewise.
+       (__glibcxx_check_sorted): Likewise.
+       (__glibcxx_check_sorted_pred): Likewise.
+       (__glibcxx_check_sorted_set): Likewise.
+       (__glibcxx_check_sorted_set_pred): Likewise.
+       * include/debug/functions.h (__check_partitioned_lower):
+       Remove code to detect safe iterators.
+       (__check_partitioned_upper): Likewise.
+       (__check_sorted): Likewise.
+
 2013-08-29  Tim Shen  <timshen91@gmail.com>
 
        * include/bits/regex.h (basic_regex<>::assign): Don't lose _M_traits.
index f4e6377e14afa304de9e53301ca06c10cd258c9b..650793065c3fd1a20d8ba4b4d49d595efeca567b 100644 (file)
@@ -336,15 +336,6 @@ namespace __gnu_debug
       return true;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence>
-    inline bool
-    __check_sorted_aux(const _Safe_iterator<_Iterator, _Sequence>& __first,
-                      const _Safe_iterator<_Iterator, _Sequence>& __last,
-                      std::random_access_iterator_tag __tag)
-  { return __check_sorted_aux(__first.base(), __last.base(), __tag); }
-
   // Can't check if an input iterator sequence is sorted, because we can't step
   // through the sequence.
   template<typename _InputIterator, typename _Predicate>
@@ -371,17 +362,6 @@ namespace __gnu_debug
       return true;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence,
-          typename _Predicate>
-    inline bool
-    __check_sorted_aux(const _Safe_iterator<_Iterator, _Sequence>& __first,
-                      const _Safe_iterator<_Iterator, _Sequence>& __last,
-                      _Predicate __pred,
-                      std::random_access_iterator_tag __tag)
-  { return __check_sorted_aux(__first.base(), __last.base(), __pred, __tag); }
-
   // Determine if a sequence is sorted.
   template<typename _InputIterator>
     inline bool
@@ -470,11 +450,13 @@ namespace __gnu_debug
       return __check_sorted_set_aux(__first, __last, __pred, _SameType());
    }
 
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // 270. Binary search requirements overly strict
+  // Determine if a sequence is partitioned w.r.t. this element.
   template<typename _ForwardIterator, typename _Tp>
     inline bool
-  __check_partitioned_lower_aux(_ForwardIterator __first,
-                               _ForwardIterator __last, const _Tp& __value,
-                               std::forward_iterator_tag)
+    __check_partitioned_lower(_ForwardIterator __first,
+                             _ForwardIterator __last, const _Tp& __value)
     {
       while (__first != __last && *__first < __value)
        ++__first;
@@ -487,37 +469,10 @@ namespace __gnu_debug
       return __first == __last;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence, typename _Tp>
-    inline bool
-    __check_partitioned_lower_aux(
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
-                       const _Tp& __value,
-                       std::random_access_iterator_tag __tag)
-    {
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
-                                          __value, __tag);
-    }
-
-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
-  // 270. Binary search requirements overly strict
-  // Determine if a sequence is partitioned w.r.t. this element.
   template<typename _ForwardIterator, typename _Tp>
     inline bool
-    __check_partitioned_lower(_ForwardIterator __first,
+    __check_partitioned_upper(_ForwardIterator __first,
                              _ForwardIterator __last, const _Tp& __value)
-    {
-      return __check_partitioned_lower_aux(__first, __last, __value,
-                                          std::__iterator_category(__first));
-    }
-
-  template<typename _ForwardIterator, typename _Tp>
-    inline bool
-    __check_partitioned_upper_aux(_ForwardIterator __first,
-                                 _ForwardIterator __last, const _Tp& __value,
-                                 std::forward_iterator_tag)
     {
       while (__first != __last && !(__value < *__first))
        ++__first;
@@ -530,35 +485,12 @@ namespace __gnu_debug
       return __first == __last;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence, typename _Tp>
-    inline bool
-    __check_partitioned_upper_aux(
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
-                       const _Tp& __value,
-                       std::random_access_iterator_tag __tag)
-    {
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
-                                          __value, __tag);
-    }
-
-  template<typename _ForwardIterator, typename _Tp>
-    inline bool
-    __check_partitioned_upper(_ForwardIterator __first,
-                             _ForwardIterator __last, const _Tp& __value)
-    {
-      return __check_partitioned_upper_aux(__first, __last, __value,
-                                          std::__iterator_category(__first));
-    }
-
+  // Determine if a sequence is partitioned w.r.t. this element.
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
     inline bool
-    __check_partitioned_lower_aux(_ForwardIterator __first,
-                                 _ForwardIterator __last, const _Tp& __value,
-                                 _Pred __pred,
-                                 std::forward_iterator_tag)
+    __check_partitioned_lower(_ForwardIterator __first,
+                             _ForwardIterator __last, const _Tp& __value,
+                             _Pred __pred)
     {
       while (__first != __last && bool(__pred(*__first, __value)))
        ++__first;
@@ -571,38 +503,11 @@ namespace __gnu_debug
       return __first == __last;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence,
-          typename _Tp, typename _Pred>
-    inline bool
-    __check_partitioned_lower_aux(
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
-                       const _Tp& __value, _Pred __pred,
-                       std::random_access_iterator_tag __tag)
-    {
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
-                                          __value, __pred, __tag);
-    }
-
-  // Determine if a sequence is partitioned w.r.t. this element.
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
     inline bool
-    __check_partitioned_lower(_ForwardIterator __first,
+    __check_partitioned_upper(_ForwardIterator __first,
                              _ForwardIterator __last, const _Tp& __value,
                              _Pred __pred)
-    {
-      return __check_partitioned_lower_aux(__first, __last, __value, __pred,
-                                          std::__iterator_category(__first));
-    }
-
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
-    inline bool
-    __check_partitioned_upper_aux(_ForwardIterator __first,
-                                 _ForwardIterator __last, const _Tp& __value,
-                                 _Pred __pred,
-                                 std::forward_iterator_tag)
     {
       while (__first != __last && !bool(__pred(__value, *__first)))
        ++__first;
@@ -615,31 +520,6 @@ namespace __gnu_debug
       return __first == __last;
     }
 
-  // For performance reason, as the iterator range has been validated, check on
-  // random access safe iterators is done using the base iterator.
-  template<typename _Iterator, typename _Sequence,
-          typename _Tp, typename _Pred>
-    inline bool
-    __check_partitioned_upper_aux(
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
-                       const _Tp& __value, _Pred __pred,
-                       std::random_access_iterator_tag __tag)
-    {
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
-                                          __value, __pred, __tag);
-    }
-
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
-    inline bool
-    __check_partitioned_upper(_ForwardIterator __first,
-                             _ForwardIterator __last, const _Tp& __value,
-                             _Pred __pred)
-    {
-      return __check_partitioned_upper_aux(__first, __last, __value, __pred,
-                                          std::__iterator_category(__first));
-    }
-
   // Helper struct to detect random access safe iterators.
   template<typename _Iterator>
     struct __is_safe_random_iterator
index 521e8c0fa4761f1266087f7d180f010356d1a999..1e160c26c0f18ed96a27aaa773fc0ec65a61c436 100644 (file)
@@ -229,7 +229,9 @@ _GLIBCXX_DEBUG_VERIFY(! this->empty(),                                      \
 // Verify that the iterator range [_First, _Last) is sorted
 #define __glibcxx_check_sorted(_First,_Last)                           \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last),      \
+ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(                    \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last)),                    \
                      _M_message(__gnu_debug::__msg_unsorted)           \
                       ._M_iterator(_First, #_First)                    \
                      ._M_iterator(_Last, #_Last))
@@ -238,7 +240,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last),   \
     predicate _Pred. */
 #define __glibcxx_check_sorted_pred(_First,_Last,_Pred)                        \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last, _Pred), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(                     \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last), _Pred),             \
                      _M_message(__gnu_debug::__msg_unsorted_pred)      \
                       ._M_iterator(_First, #_First)                    \
                      ._M_iterator(_Last, #_Last)                       \
@@ -248,7 +252,8 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last, _Pred), \
 #define __glibcxx_check_sorted_set(_First1,_Last1,_First2)             \
 __glibcxx_check_valid_range(_First1,_Last1);                           \
 _GLIBCXX_DEBUG_VERIFY(                                                  \
-  __gnu_debug::__check_sorted_set(_First1, _Last1, _First2),           \
+  __gnu_debug::__check_sorted_set(__gnu_debug::__base(_First1),                \
+                                 __gnu_debug::__base(_Last1), _First2),\
   _M_message(__gnu_debug::__msg_unsorted)                              \
   ._M_iterator(_First1, #_First1)                                      \
   ._M_iterator(_Last1, #_Last1))
@@ -257,7 +262,9 @@ _GLIBCXX_DEBUG_VERIFY(                                                  \
 #define __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred)  \
 __glibcxx_check_valid_range(_First1,_Last1);                           \
 _GLIBCXX_DEBUG_VERIFY(                                                 \
-  __gnu_debug::__check_sorted_set(_First1, _Last1, _First2, _Pred),    \
+  __gnu_debug::__check_sorted_set(__gnu_debug::__base(_First1),                \
+                                 __gnu_debug::__base(_Last1),          \
+                                 _First2, _Pred),                      \
   _M_message(__gnu_debug::__msg_unsorted_pred)                         \
   ._M_iterator(_First1, #_First1)                                      \
   ._M_iterator(_Last1, #_Last1)                                                \
@@ -267,8 +274,9 @@ _GLIBCXX_DEBUG_VERIFY(                                                      \
     w.r.t. the value _Value. */
 #define __glibcxx_check_partitioned_lower(_First,_Last,_Value)         \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
-                                                           _Value),    \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last), _Value),            \
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
                      ._M_iterator(_First, #_First)                     \
                      ._M_iterator(_Last, #_Last)                       \
@@ -276,8 +284,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
 
 #define __glibcxx_check_partitioned_upper(_First,_Last,_Value)         \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
-                                                           _Value),    \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last), _Value),            \
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
                      ._M_iterator(_First, #_First)                     \
                      ._M_iterator(_Last, #_Last)                       \
@@ -287,8 +296,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
     w.r.t. the value _Value and predicate _Pred. */
 #define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
-                                                        _Value, _Pred), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
                      ._M_iterator(_First, #_First)                     \
                      ._M_iterator(_Last, #_Last)                       \
@@ -299,8 +309,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
     w.r.t. the value _Value and predicate _Pred. */
 #define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
 __glibcxx_check_valid_range(_First,_Last);                             \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
-                                                        _Value, _Pred), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
+                       __gnu_debug::__base(_First),                    \
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
                      ._M_iterator(_First, #_First)                     \
                      ._M_iterator(_Last, #_Last)                       \