From 2a896becdf500ce7f5db2d059b1445fb05a8c329 Mon Sep 17 00:00:00 2001 From: Marcel Krems Date: Fri, 28 Aug 2020 21:05:59 +0200 Subject: [PATCH] qarraydataops: Fix compiler warnings under MSVC 2019.7 qarraydataops.h(444): warning C4127: conditional expression is constant qarraydataops.h(444): note: consider using 'if constexpr' statement instead ... qabstractitemmodel.h(261): note: see reference to class template instantiation 'QList' being compiled qarraydataops.h(1209) : warning C4702: unreachable code qarraydataops.h(1104): warning C4913: user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used src/corelib/kernel/qobjectdefs_impl.h(96): note: could be 'void QtPrivate::operator ,::iterator>>(std::reverse_iterator::iterator>,const QtPrivate::ApplyReturnValue &)' with [ T=QTextEdit::ExtraSelection ] qarraydataops.h(1104): note: while trying to match the argument list '(std::reverse_iterator::iterator>, std::reverse_iterator::iterator>)' with [ T=QTextEdit::ExtraSelection ] ... codeedit.cpp(84): note: see reference to class template instantiation 'QList' being compiled Change-Id: I3c5007e40f709c28bc8b3b3bec5ea98ea5f34e5a Reviewed-by: Andrei Golubev Reviewed-by: Volker Hilsheimer --- src/corelib/tools/qarraydataops.h | 70 ++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index 03ba93198c0..9fdf0738e13 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -441,16 +441,20 @@ public: // only use memcmp for fundamental types or pointers. // Other types could have padding in the data structure or custom comparison // operators that would break the comparison using memcmp - if (QArrayDataPointer::pass_parameter_by_value) + if constexpr (QArrayDataPointer::pass_parameter_by_value) { return ::memcmp(begin1, begin2, n * sizeof(T)) == 0; - const T *end1 = begin1 + n; - while (begin1 != end1) { - if (*begin1 == *begin2) - ++begin1, ++begin2; - else - return false; + } else { + const T *end1 = begin1 + n; + while (begin1 != end1) { + if (*begin1 == *begin2) { + ++begin1; + ++begin2; + } else { + return false; + } + } + return true; } - return true; } void reallocate(qsizetype alloc, typename Data::ArrayOptions options) @@ -587,12 +591,14 @@ public: // Copy assign over existing elements while (readIter != where) { - --readIter, --writeIter; + --readIter; + --writeIter; *writeIter = *readIter; } while (writeIter != where) { - --e, --writeIter; + --e; + --writeIter; *writeIter = *e; } } @@ -619,12 +625,14 @@ public: // Construct new elements in array while (writeIter != step1End) { new (writeIter) T(*readIter); - ++readIter, ++writeIter; + ++readIter; + ++writeIter; } while (writeIter != begin) { new (writeIter) T(*b); - ++b, ++writeIter; + ++b; + ++writeIter; } destroyer.commit(); @@ -634,12 +642,14 @@ public: // Copy assign over existing elements while (readIter != where) { *writeIter = *readIter; - ++readIter, ++writeIter; + ++readIter; + ++writeIter; } while (writeIter != where) { *writeIter = *b; - ++b, ++writeIter; + ++b; + ++writeIter; } } @@ -683,12 +693,14 @@ public: // Copy assign over existing elements while (readIter != where) { - --readIter, --writeIter; + --readIter; + --writeIter; *writeIter = *readIter; } while (writeIter != where) { - --n, --writeIter; + --n; + --writeIter; *writeIter = t; } } @@ -712,7 +724,8 @@ public: // Construct new elements in array while (writeIter != step1End) { new (writeIter) T(*readIter); - ++readIter, ++writeIter; + ++readIter; + ++writeIter; } while (writeIter != begin) { @@ -727,7 +740,8 @@ public: // Copy assign over existing elements while (readIter != where) { *writeIter = *readIter; - ++readIter, ++writeIter; + ++readIter; + ++writeIter; } while (writeIter != where) { @@ -784,7 +798,8 @@ public: // onto b to the new end while (e != end) { *b = *e; - ++b, ++e; + ++b; + ++e; } // destroy the final elements at the end @@ -808,7 +823,8 @@ public: // move (by assignment) the elements from begin to b // onto the new begin to e while (b != begin) { - --b, --e; + --b; + --e; *e = *b; } @@ -835,10 +851,12 @@ public: { const T *end1 = begin1 + n; while (begin1 != end1) { - if (*begin1 == *begin2) - ++begin1, ++begin2; - else + if (*begin1 == *begin2) { + ++begin1; + ++begin2; + } else { return false; + } } return true; } @@ -1101,7 +1119,8 @@ private: // step 2. move assign over existing elements in the overlapping // region (if there's an overlap) while (e != begin) { - --start, --e; + --start; + --e; *start = std::move_if_noexcept(*e); } @@ -1205,8 +1224,9 @@ private: || std::is_same_v; if constexpr (selfIterator) { return (first >= this->begin() && last <= this->end()); + } else { + return false; } - return false; }; const bool inRange = iteratorsInRange(b, e);