[libc++] Applied [[nodiscard]] to array::iterator (#198492)
Towards #172124
This commit is contained in:
parent
09ad100529
commit
184a8f9475
3 changed files with 58 additions and 13 deletions
|
|
@ -128,7 +128,7 @@ private:
|
|||
|
||||
public:
|
||||
// Dereference and indexing operations.
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator*() const _NOEXCEPT {
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator*() const _NOEXCEPT {
|
||||
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
|
||||
__current() != __end(), "__static_bounded_iter::operator*: Attempt to dereference an iterator at the end");
|
||||
return *__current();
|
||||
|
|
@ -140,7 +140,8 @@ public:
|
|||
return std::__to_address(__current());
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator[](difference_type __n) const _NOEXCEPT {
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference
|
||||
operator[](difference_type __n) const _NOEXCEPT {
|
||||
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
|
||||
__n >= __begin() - __current(),
|
||||
"__static_bounded_iter::operator[]: Attempt to index an iterator past the start");
|
||||
|
|
@ -186,13 +187,13 @@ public:
|
|||
__current() += __n;
|
||||
return *this;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
operator+(__static_bounded_iter const& __self, difference_type __n) _NOEXCEPT {
|
||||
__static_bounded_iter __tmp(__self);
|
||||
__tmp += __n;
|
||||
return __tmp;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
operator+(difference_type __n, __static_bounded_iter const& __self) _NOEXCEPT {
|
||||
__static_bounded_iter __tmp(__self);
|
||||
__tmp += __n;
|
||||
|
|
@ -208,13 +209,13 @@ public:
|
|||
__current() -= __n;
|
||||
return *this;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend __static_bounded_iter
|
||||
operator-(__static_bounded_iter const& __self, difference_type __n) _NOEXCEPT {
|
||||
__static_bounded_iter __tmp(__self);
|
||||
__tmp -= __n;
|
||||
return __tmp;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend difference_type
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 friend difference_type
|
||||
operator-(__static_bounded_iter const& __x, __static_bounded_iter const& __y) _NOEXCEPT {
|
||||
return __x.__current() - __y.__current();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@ public:
|
|||
int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter(const __wrap_iter<_OtherIter>& __u) _NOEXCEPT
|
||||
: __i_(__u.__i_) {}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator*() const _NOEXCEPT { return *__i_; }
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator*() const _NOEXCEPT {
|
||||
return *__i_;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pointer operator->() const _NOEXCEPT {
|
||||
return std::__to_address(__i_);
|
||||
}
|
||||
|
|
@ -78,7 +80,8 @@ public:
|
|||
--(*this);
|
||||
return __tmp;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter operator+(difference_type __n) const _NOEXCEPT {
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter
|
||||
operator+(difference_type __n) const _NOEXCEPT {
|
||||
__wrap_iter __w(*this);
|
||||
__w += __n;
|
||||
return __w;
|
||||
|
|
@ -87,14 +90,16 @@ public:
|
|||
__i_ += __n;
|
||||
return *this;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter operator-(difference_type __n) const _NOEXCEPT {
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter
|
||||
operator-(difference_type __n) const _NOEXCEPT {
|
||||
return *this + (-__n);
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter& operator-=(difference_type __n) _NOEXCEPT {
|
||||
*this += -__n;
|
||||
return *this;
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator[](difference_type __n) const _NOEXCEPT {
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference
|
||||
operator[](difference_type __n) const _NOEXCEPT {
|
||||
return __i_[__n];
|
||||
}
|
||||
|
||||
|
|
@ -201,18 +206,18 @@ private:
|
|||
|
||||
#ifndef _LIBCPP_CXX03_LANG
|
||||
template <class _Iter2>
|
||||
_LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14 auto
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14 auto
|
||||
operator-(const __wrap_iter& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT->decltype(__x.__i_ - __y.__i_)
|
||||
#else
|
||||
template <class _Iter2>
|
||||
_LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14
|
||||
typename __wrap_iter::difference_type operator-(const __wrap_iter& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
|
||||
#endif // C++03
|
||||
{
|
||||
return __x.__i_ - __y.__i_;
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter
|
||||
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI friend _LIBCPP_CONSTEXPR_SINCE_CXX14 __wrap_iter
|
||||
operator+(typename __wrap_iter::difference_type __n, __wrap_iter __x) _NOEXCEPT {
|
||||
__x += __n;
|
||||
return __x;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <array>
|
||||
|
||||
// Check that functions are marked [[nodiscard]]
|
||||
|
||||
#include <array>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
void test() {
|
||||
typedef std::array<int, 94> Container;
|
||||
Container c;
|
||||
Container::iterator it = c.begin();
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
*it;
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
it[0];
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
it + 1;
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
1 + it;
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
it - 1;
|
||||
|
||||
// expected-warning-re@+1 {{{{(ignoring return value of function declared with 'nodiscard' attribute|expression result unused)}}}}
|
||||
it - it;
|
||||
}
|
||||
Loading…
Reference in a new issue