Copy or check ShortData rather than pointer in more places
This follows-up on commit 4d24fcd3e1
-
when ShortData is bigger than a pointer (on 32-bit systems, when using
64-bit ShortData), copying d isn't sufficient; data must be copied.
Likewise, comparing d to check for equality is insufficient when
isShort(), as the other may also be short and differ in the more
significant bytes.
Change-Id: I49c0cf33727b8b43436cf0e3f57f602e83226885
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
1bc7e9e77b
commit
c88d2b0fcd
@ -3016,7 +3016,7 @@ inline QDateTime::Data::Data(Qt::TimeSpec spec)
|
||||
}
|
||||
|
||||
inline QDateTime::Data::Data(const Data &other) noexcept
|
||||
: d(other.d)
|
||||
: data(other.data)
|
||||
{
|
||||
if (!isShort()) {
|
||||
// check if we could shrink
|
||||
@ -3033,17 +3033,17 @@ inline QDateTime::Data::Data(const Data &other) noexcept
|
||||
}
|
||||
|
||||
inline QDateTime::Data::Data(Data &&other) noexcept
|
||||
: d(other.d)
|
||||
: data(other.data)
|
||||
{
|
||||
// reset the other to a short state
|
||||
Data dummy;
|
||||
Q_ASSERT(dummy.isShort());
|
||||
other.d = dummy.d;
|
||||
other.data = dummy.data;
|
||||
}
|
||||
|
||||
inline QDateTime::Data &QDateTime::Data::operator=(const Data &other) noexcept
|
||||
{
|
||||
if (d == other.d)
|
||||
if (isShort() ? data == other.data : d == other.d)
|
||||
return *this;
|
||||
|
||||
auto x = d;
|
||||
|
@ -266,6 +266,8 @@ class Q_CORE_EXPORT QDateTime
|
||||
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
quintptr status : 8;
|
||||
#endif
|
||||
friend constexpr bool operator==(const ShortData &lhs, const ShortData &rhs)
|
||||
{ return lhs.status == rhs.status && lhs.msecs == rhs.msecs; }
|
||||
};
|
||||
|
||||
union Data {
|
||||
|
Loading…
Reference in New Issue
Block a user