1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:07:45 +00:00

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
3 changed files with 17 additions and 9 deletions

View file

@ -187,6 +187,7 @@ public:
return *ret; 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 ALWAYS_INLINE T operator=(T desired) volatile noexcept
{ {
store(desired); store(desired);
@ -317,6 +318,7 @@ public:
return __atomic_load_n(&m_value, order); 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 ALWAYS_INLINE T operator=(T desired) volatile noexcept
{ {
store(desired); store(desired);
@ -417,6 +419,7 @@ public:
return __atomic_load_n(&m_value, order); 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 T* operator=(T* desired) volatile noexcept
{ {
store(desired); store(desired);

View file

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

View file

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