libstdc++: Make relational operators work with const guarded iterators (PR 92472)
authorJonathan Wakely <jwakely@redhat.com>
Thu, 7 May 2020 20:43:49 +0000 (21:43 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 7 May 2020 20:43:49 +0000 (21:43 +0100)
This is a correct fix for the incorrect cppcheck suggestion to make
these parameters const. In order to that, the dereference operators need
to be const. The conversions to the underlying iterator can be const
too.

PR c/92472
* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
(_UnguardedIterator::operator _RAIter): Add const qualifier.
(operator<(_GuardedIterator&, _GuardedIterator&)
(operator<=(_GuardedIterator&, _GuardedIterator&)
(operator<(_UnguardedIterator&, _UnguardedIterator&)
(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
parameters to const references.

libstdc++-v3/ChangeLog
libstdc++-v3/include/parallel/multiway_merge.h

index f5c278e5d581838040c4e87d1f2cfda1764da49b..d0751909dd2dc74fa350581a9fd69354208bc334 100644 (file)
        * config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt:
        Likewise.
 
+2020-05-07  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR c/92472
+       * include/parallel/multiway_merge.h (_GuardedIterator::operator*)
+       (_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
+       (_UnguardedIterator::operator _RAIter): Add const qualifier.
+       (operator<(_GuardedIterator&, _GuardedIterator&)
+       (operator<=(_GuardedIterator&, _GuardedIterator&)
+       (operator<(_UnguardedIterator&, _UnguardedIterator&)
+       (operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
+       parameters to const references.
+
 2020-05-06  Martin Liska  <mliska@suse.cz>
 
        Revert:
index 983c7b2bd9a6d12c06abba9921a1087221cc9e34..52a8b2ca9e766fe6266988a5ae652e625b6e5a1e 100644 (file)
@@ -104,12 +104,12 @@ namespace __gnu_parallel
       /** @brief Dereference operator.
       *  @return Referenced element. */
       typename std::iterator_traits<_RAIter>::value_type&
-      operator*()
+      operator*() const
       { return *_M_current; }
 
       /** @brief Convert to wrapped iterator.
       *  @return Wrapped iterator. */
-      operator _RAIter()
+      operator _RAIter() const
       { return _M_current; }
 
       /** @brief Compare two elements referenced by guarded iterators.
@@ -117,8 +117,8 @@ namespace __gnu_parallel
        *  @param __bi2 Second iterator.
        *  @return @c true if less. */
       friend bool
-      operator<(_GuardedIterator<_RAIter, _Compare>& __bi1,
-               _GuardedIterator<_RAIter, _Compare>& __bi2)
+      operator<(const _GuardedIterator<_RAIter, _Compare>& __bi1,
+               const _GuardedIterator<_RAIter, _Compare>& __bi2)
       {
        if (__bi1._M_current == __bi1._M_end)       // __bi1 is sup
          return __bi2._M_current == __bi2._M_end;  // __bi2 is not sup
@@ -132,8 +132,8 @@ namespace __gnu_parallel
        *  @param __bi2 Second iterator.
        *  @return @c True if less equal. */
       friend bool
-      operator<=(_GuardedIterator<_RAIter, _Compare>& __bi1,
-                _GuardedIterator<_RAIter, _Compare>& __bi2)
+      operator<=(const _GuardedIterator<_RAIter, _Compare>& __bi1,
+                const _GuardedIterator<_RAIter, _Compare>& __bi2)
       {
        if (__bi2._M_current == __bi2._M_end)       // __bi1 is sup
          return __bi1._M_current != __bi1._M_end;  // __bi2 is not sup
@@ -174,12 +174,12 @@ namespace __gnu_parallel
       /** @brief Dereference operator.
       *  @return Referenced element. */
       typename std::iterator_traits<_RAIter>::value_type&
-      operator*()
+      operator*() const
       { return *_M_current; }
 
       /** @brief Convert to wrapped iterator.
       *  @return Wrapped iterator. */
-      operator _RAIter()
+      operator _RAIter() const
       { return _M_current; }
 
       /** @brief Compare two elements referenced by unguarded iterators.
@@ -187,8 +187,8 @@ namespace __gnu_parallel
        *  @param __bi2 Second iterator.
        *  @return @c true if less. */
       friend bool
-      operator<(_UnguardedIterator<_RAIter, _Compare>& __bi1,
-               _UnguardedIterator<_RAIter, _Compare>& __bi2)
+      operator<(const _UnguardedIterator<_RAIter, _Compare>& __bi1,
+               const _UnguardedIterator<_RAIter, _Compare>& __bi2)
       {
        // Normal compare.
        return (__bi1.__comp)(*__bi1, *__bi2);
@@ -199,8 +199,8 @@ namespace __gnu_parallel
        *  @param __bi2 Second iterator.
        *  @return @c True if less equal. */
       friend bool
-      operator<=(_UnguardedIterator<_RAIter, _Compare>& __bi1,
-                _UnguardedIterator<_RAIter, _Compare>& __bi2)
+      operator<=(const _UnguardedIterator<_RAIter, _Compare>& __bi1,
+                const _UnguardedIterator<_RAIter, _Compare>& __bi2)
       {
        // Normal compare.
        return !(__bi1.__comp)(*__bi2, *__bi1);