aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-05-07 21:43:49 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-05-07 21:43:49 +0100
commit4cbc9d8b346b932f34828a51e8822881413951b7 (patch)
tree934e9347ab3a49342663d746ea67ba1524faa3d2
parentc7100843831147a034fe37d231c54ac53ceace45 (diff)
downloadgcc-4cbc9d8b346b932f34828a51e8822881413951b7.zip
gcc-4cbc9d8b346b932f34828a51e8822881413951b7.tar.gz
gcc-4cbc9d8b346b932f34828a51e8822881413951b7.tar.bz2
libstdc++: Make relational operators work with const guarded iterators (PR 92472)
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.
-rw-r--r--libstdc++-v3/ChangeLog12
-rw-r--r--libstdc++-v3/include/parallel/multiway_merge.h24
2 files changed, 24 insertions, 12 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index f5c278e..d075190 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -27,6 +27,18 @@
* 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:
diff --git a/libstdc++-v3/include/parallel/multiway_merge.h b/libstdc++-v3/include/parallel/multiway_merge.h
index 983c7b2..52a8b2c 100644
--- a/libstdc++-v3/include/parallel/multiway_merge.h
+++ b/libstdc++-v3/include/parallel/multiway_merge.h
@@ -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);