summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qvector.h2
-rw-r--r--tests/auto/corelib/tools/qvector/tst_qvector.cpp11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 988d5a9e1b..57cf6e51ce 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -416,7 +416,7 @@ template <typename T>
void QVector<T>::resize(int asize)
{
if (asize == d->size)
- return;
+ return detach();
if (asize > int(d->alloc) || !isDetached()) { // there is not enough space
QArrayData::AllocationOptions opt = asize > int(d->alloc) ? QArrayData::Grow : QArrayData::Default;
realloc(qMax(int(d->alloc), asize), opt);
diff --git a/tests/auto/corelib/tools/qvector/tst_qvector.cpp b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
index a7faeb5ca5..383318979d 100644
--- a/tests/auto/corelib/tools/qvector/tst_qvector.cpp
+++ b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
@@ -250,6 +250,7 @@ private slots:
void fillInt() const;
void fillMovable() const;
void fillCustom() const;
+ void fillDetaches() const;
void first() const;
void fromListInt() const;
void fromListMovable() const;
@@ -1272,6 +1273,16 @@ void tst_QVector::fillCustom() const
QCOMPARE(instancesCount, Custom::counter.loadAcquire());
}
+void tst_QVector::fillDetaches() const
+{
+ QVector<int> test = { 1, 2, 3 };
+ QVector<int> copy = test;
+ copy.fill(42);
+
+ QCOMPARE(test, QVector<int>({1, 2, 3}));
+ QCOMPARE(copy, QVector<int>({42, 42, 42}));
+}
+
void tst_QVector::first() const
{
QVector<int> myvec;