AK: Resolve clang-tidy warnings about unusual assignment operators

Either not returning *this, or in the case of Variant, not checking for
self assignment. In AK::Atomic, we can't return *this due to the wrapper
semantics Atomic implements.
This commit is contained in:
Andrew Kaster 2021-10-31 14:52:26 -06:00 committed by Andreas Kling
parent 22feb9d47b
commit 163367da39
Notes: sideshowbarker 2024-07-18 01:08:05 +09:00
3 changed files with 17 additions and 9 deletions

View file

@ -187,6 +187,7 @@ public:
return *ret;
}
// NOLINTNEXTLINE(misc-unconventional-assign-operator) We want operator= to exchange the value, so returning an object of type Atomic& here does not make sense
ALWAYS_INLINE T operator=(T desired) volatile noexcept
{
store(desired);
@ -317,6 +318,7 @@ public:
return __atomic_load_n(&m_value, order);
}
// NOLINTNEXTLINE(misc-unconventional-assign-operator) We want operator= to exchange the value, so returning an object of type Atomic& here does not make sense
ALWAYS_INLINE T operator=(T desired) volatile noexcept
{
store(desired);
@ -417,6 +419,7 @@ public:
return __atomic_load_n(&m_value, order);
}
// NOLINTNEXTLINE(misc-unconventional-assign-operator) We want operator= to exchange the value, so returning an object of type Atomic& here does not make sense
T* operator=(T* desired) volatile noexcept
{
store(desired);

View file

@ -138,7 +138,8 @@ public:
template<typename U>
constexpr Checked& operator=(U value)
{
return *this = Checked(value);
*this = Checked(value);
return *this;
}
constexpr Checked& operator=(const Checked& other) = default;

View file

@ -271,11 +271,13 @@ public:
requires(!(IsTriviallyCopyConstructible<Ts> && ...) || !(IsTriviallyDestructible<Ts> && ...))
#endif
{
if constexpr (!(IsTriviallyDestructible<Ts> && ...)) {
Helper::delete_(m_index, m_data);
if (this != &other) {
if constexpr (!(IsTriviallyDestructible<Ts> && ...)) {
Helper::delete_(m_index, m_data);
}
m_index = other.m_index;
Helper::copy_(other.m_index, other.m_data, m_data);
}
m_index = other.m_index;
Helper::copy_(other.m_index, other.m_data, m_data);
return *this;
}
@ -284,11 +286,13 @@ public:
requires(!(IsTriviallyMoveConstructible<Ts> && ...) || !(IsTriviallyDestructible<Ts> && ...))
#endif
{
if constexpr (!(IsTriviallyDestructible<Ts> && ...)) {
Helper::delete_(m_index, m_data);
if (this != &other) {
if constexpr (!(IsTriviallyDestructible<Ts> && ...)) {
Helper::delete_(m_index, m_data);
}
m_index = other.m_index;
Helper::move_(other.m_index, other.m_data, m_data);
}
m_index = other.m_index;
Helper::move_(other.m_index, other.m_data, m_data);
return *this;
}