From 5ea50054a18c07f86f61e95dad5bca41c521ad3d Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sun, 2 May 2021 02:17:14 +0200 Subject: QArrayData: store the right flag type, not an int There's no reason to be storing `int` in the array data header and then using it as a QFlags. Just store the QFlags. Change-Id: I78f489550d74d15a560dacf338110d80a7ddfdd2 Reviewed-by: Thiago Macieira --- src/corelib/tools/qarraydata.cpp | 2 +- src/corelib/tools/qarraydata.h | 2 +- src/corelib/tools/qarraydatapointer.h | 2 +- tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp index 3297b51cfe..9a52898716 100644 --- a/src/corelib/tools/qarraydata.cpp +++ b/src/corelib/tools/qarraydata.cpp @@ -178,7 +178,7 @@ static QArrayData *allocateData(qsizetype allocSize) QArrayData *header = static_cast(::malloc(size_t(allocSize))); if (header) { header->ref_.storeRelaxed(1); - header->flags = 0; + header->flags = {}; header->alloc = 0; } return header; diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h index 9f39c60f3c..e4250cce47 100644 --- a/src/corelib/tools/qarraydata.h +++ b/src/corelib/tools/qarraydata.h @@ -68,7 +68,7 @@ struct QArrayData Q_DECLARE_FLAGS(ArrayOptions, ArrayOption) QBasicAtomicInt ref_; - uint flags; + ArrayOptions flags; qsizetype alloc; qsizetype allocatedCapacity() noexcept diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h index af60a105fe..c984989ac8 100644 --- a/src/corelib/tools/qarraydatapointer.h +++ b/src/corelib/tools/qarraydatapointer.h @@ -330,7 +330,7 @@ public: bool isSharedWith(const QArrayDataPointer &other) const noexcept { return d && d == other.d; } bool needsDetach() const noexcept { return !d || d->needsDetach(); } qsizetype detachCapacity(qsizetype newSize) const noexcept { return d ? d->detachCapacity(newSize) : newSize; } - const typename Data::ArrayOptions flags() const noexcept { return d ? typename Data::ArrayOption(d->flags) : Data::ArrayOptionDefault; } + const typename Data::ArrayOptions flags() const noexcept { return d ? d->flags : Data::ArrayOptionDefault; } void setFlag(typename Data::ArrayOptions f) noexcept { Q_ASSERT(d); d->flags |= f; } void clearFlag(typename Data::ArrayOptions f) noexcept { if (d) d->flags &= ~f; } diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index 856aa4b20f..81c75fffbc 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -97,7 +97,7 @@ void tst_QArrayData::referenceCounting() { { // Reference counting initialized to 1 (owned) - QArrayData array = { Q_BASIC_ATOMIC_INITIALIZER(1), 0, 0 }; + QArrayData array = { Q_BASIC_ATOMIC_INITIALIZER(1), {}, 0 }; QCOMPARE(array.ref_.loadRelaxed(), 1); -- cgit v1.2.3