summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/text/qbytearray.cpp2
-rw-r--r--src/corelib/text/qstring.cpp4
-rw-r--r--src/corelib/tools/qlist.h7
3 files changed, 6 insertions, 7 deletions
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index 8cc45d4500..1eb5162fb1 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -1942,7 +1942,7 @@ QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
// ### optimize me
if (d->needsDetach() || newSize > capacity() || shouldGrow) {
auto flags = d->detachFlags() | Data::GrowsForward;
- if (i <= oldSize / 4) // using QList's policy
+ if (oldSize != 0 && i <= oldSize / 4) // using QList's policy
flags |= Data::GrowsBackwards;
reallocGrowData(newSize + 1, flags);
}
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index e00b45f3f2..dd1b57dbf3 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -2690,7 +2690,7 @@ QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), size);
auto flags = d->detachFlags() | Data::GrowsForward;
- if (i <= oldSize / 4)
+ if (oldSize != 0 && i <= oldSize / 4)
flags |= Data::GrowsBackwards;
// ### optimize me
@@ -2724,7 +2724,7 @@ QString& QString::insert(qsizetype i, QChar ch)
const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), 1);
auto flags = d->detachFlags() | Data::GrowsForward;
- if (i <= oldSize / 4)
+ if (oldSize != 0 && i <= oldSize / 4)
flags |= Data::GrowsBackwards;
// ### optimize me
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index a704de54ea..ebb0fd9531 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -528,8 +528,7 @@ inline void QList<T>::remove(qsizetype i, qsizetype n)
((d->flags() & Data::CapacityReserved) == 0
&& newSize < d->allocatedCapacity()/2)) {
// allocate memory
- DataPointer detached(Data::allocate(d->detachCapacity(newSize),
- d->detachFlags() & ~(Data::GrowsBackwards | Data::GrowsForward)));
+ DataPointer detached(Data::allocate(d->detachCapacity(newSize), d->detachFlags()));
const_iterator where = constBegin() + i;
if (newSize) {
detached->copyAppend(constBegin(), where);
@@ -616,7 +615,7 @@ QList<T>::insert(qsizetype i, qsizetype n, parameter_type t)
const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + i, n);
if (d->needsDetach() || newSize > d->allocatedCapacity() || shouldGrow) {
typename Data::ArrayOptions flags = d->detachFlags() | Data::GrowsForward;
- if (i <= d.size / 4)
+ if (d.size != 0 && i <= d.size / 4)
flags |= Data::GrowsBackwards;
DataPointer detached(DataPointer::allocateGrow(d, newSize, flags));
@@ -648,7 +647,7 @@ QList<T>::emplace(qsizetype i, Args&&... args)
const size_t newSize = size() + 1;
if (d->needsDetach() || newSize > d->allocatedCapacity() || shouldGrow) {
typename Data::ArrayOptions flags = d->detachFlags() | Data::GrowsForward;
- if (i <= d.size / 4)
+ if (d.size != 0 && i <= d.size / 4)
flags |= Data::GrowsBackwards;
DataPointer detached(DataPointer::allocateGrow(d, newSize, flags));