From 1c63909ad8caee11ba0ec4af998d981bd50d3ee1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 7 Feb 2013 13:56:57 -0800 Subject: Make sure all containers compile in strict-iterator mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unit-test this by making the QList, QVector, QHash and QMap unit tests be duplicated under strict-iterator mode. There's no test for QLinkedList. The tst_Collections test does not compile under strict-iterator mode. It generated over 15000 errors when I tried. The strict iterators required a small change: the difference_type typedef needs to match the operators that get distances (operator-(iterator)) and move the iterator around (+, -, +=, -=, etc.). Task-number: QTBUG-29608 Change-Id: I834873934c51d0f139a994cd395818da4ec997e2 Reviewed-by: Jędrzej Nowacki Reviewed-by: Jason McDonald --- src/corelib/tools/qarraydata.h | 4 ++-- src/corelib/tools/qarraydataops.h | 2 +- tests/auto/corelib/tools/qarraydata/qarraydata.pro | 4 ++-- tests/auto/corelib/tools/qarraydata/simplevector.h | 10 +++++----- tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp | 2 +- .../qarraydata_strictiterators/qarraydata_strictiterators.pro | 3 +++ tests/auto/corelib/tools/qhash/qhash.pro | 2 +- .../tools/qhash_strictiterators/qhash_strictiterators.pro | 3 +++ tests/auto/corelib/tools/qlist/qlist.pro | 2 +- .../tools/qlist_strictiterators/qlist_strictiterators.pro | 3 +++ tests/auto/corelib/tools/qmap/qmap.pro | 2 +- tests/auto/corelib/tools/qmap/tst_qmap.cpp | 2 -- .../tools/qmap_strictiterators/qmap_strictiterators.pro | 3 +++ tests/auto/corelib/tools/qvector/qvector.pro | 2 +- .../tools/qvector_strictiterators/qvector_strictiterators.pro | 3 +++ tests/auto/corelib/tools/tools.pro | 7 ++++++- 16 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 tests/auto/corelib/tools/qarraydata_strictiterators/qarraydata_strictiterators.pro create mode 100644 tests/auto/corelib/tools/qhash_strictiterators/qhash_strictiterators.pro create mode 100644 tests/auto/corelib/tools/qlist_strictiterators/qlist_strictiterators.pro create mode 100644 tests/auto/corelib/tools/qmap_strictiterators/qmap_strictiterators.pro create mode 100644 tests/auto/corelib/tools/qvector_strictiterators/qvector_strictiterators.pro diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h index 7df4694bcd..ffb2b8765e 100644 --- a/src/corelib/tools/qarraydata.h +++ b/src/corelib/tools/qarraydata.h @@ -135,7 +135,7 @@ struct QTypedArrayData public: T *i; typedef std::random_access_iterator_tag iterator_category; - typedef qptrdiff difference_type; + typedef int difference_type; typedef T value_type; typedef T *pointer; typedef T &reference; @@ -169,7 +169,7 @@ struct QTypedArrayData public: const T *i; typedef std::random_access_iterator_tag iterator_category; - typedef qptrdiff difference_type; + typedef int difference_type; typedef T value_type; typedef const T *pointer; typedef const T &reference; diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index c8a0825480..b94c6b50ea 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -122,7 +122,7 @@ struct QPodArrayOps Q_ASSERT(b >= this->begin() && b < this->end()); Q_ASSERT(e > this->begin() && e < this->end()); - ::memmove(b, e, (this->end() - e) * sizeof(T)); + ::memmove(b, e, (static_cast(this->end()) - e) * sizeof(T)); this->size -= (e - b); } }; diff --git a/tests/auto/corelib/tools/qarraydata/qarraydata.pro b/tests/auto/corelib/tools/qarraydata/qarraydata.pro index d13cc86cf5..d5fe08c009 100644 --- a/tests/auto/corelib/tools/qarraydata/qarraydata.pro +++ b/tests/auto/corelib/tools/qarraydata/qarraydata.pro @@ -1,6 +1,6 @@ TARGET = tst_qarraydata -SOURCES += tst_qarraydata.cpp -HEADERS += simplevector.h +SOURCES += $$PWD/tst_qarraydata.cpp +HEADERS += $$PWD/simplevector.h QT = core testlib CONFIG += testcase parallel_test DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h index ea3892ec5c..40917c0172 100644 --- a/tests/auto/corelib/tools/qarraydata/simplevector.h +++ b/tests/auto/corelib/tools/qarraydata/simplevector.h @@ -269,9 +269,9 @@ public: if (first == last) return; - T *const begin = d->begin(); - T *const where = begin + position; - const T *const end = begin + d->size; + const iterator begin = d->begin(); + const iterator where = begin + position; + const iterator end = begin + d->size; if (d.needsDetach() || capacity() - size() < size_t(last - first)) { SimpleVector detached(Data::allocate( @@ -290,8 +290,8 @@ public: if ((first >= where && first < end) || (last > where && last <= end)) { // Copy overlapping data first and only then shuffle it into place - T *start = d->begin() + position; - T *middle = d->end(); + iterator start = d->begin() + position; + iterator middle = d->end(); d->copyAppend(first, last); std::rotate(start, middle, d->end()); diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index f9ce7425f6..60b807a7bc 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -1559,7 +1559,7 @@ void tst_QArrayData::literals() #endif QVERIFY(v.isSharable()); - QCOMPARE((void*)(v.constBegin() + v.size()), (void*)v.constEnd()); + QCOMPARE((void*)(const char*)(v.constBegin() + v.size()), (void*)(const char*)v.constEnd()); for (int i = 0; i < 10; ++i) QCOMPARE(const_(v)[i], char('A' + i)); diff --git a/tests/auto/corelib/tools/qarraydata_strictiterators/qarraydata_strictiterators.pro b/tests/auto/corelib/tools/qarraydata_strictiterators/qarraydata_strictiterators.pro new file mode 100644 index 0000000000..b01fbd84d1 --- /dev/null +++ b/tests/auto/corelib/tools/qarraydata_strictiterators/qarraydata_strictiterators.pro @@ -0,0 +1,3 @@ +include(../qarraydata/qarraydata.pro) +TARGET = tst_qarraydata_strictiterators +DEFINES += QT_STRICT_ITERATORS=1 tst_QArrayData=tst_QArrayData_StrictIterators diff --git a/tests/auto/corelib/tools/qhash/qhash.pro b/tests/auto/corelib/tools/qhash/qhash.pro index 630eabdb7c..1ed062ca91 100644 --- a/tests/auto/corelib/tools/qhash/qhash.pro +++ b/tests/auto/corelib/tools/qhash/qhash.pro @@ -1,5 +1,5 @@ CONFIG += testcase parallel_test TARGET = tst_qhash QT = core testlib -SOURCES = tst_qhash.cpp +SOURCES = $$PWD/tst_qhash.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/tools/qhash_strictiterators/qhash_strictiterators.pro b/tests/auto/corelib/tools/qhash_strictiterators/qhash_strictiterators.pro new file mode 100644 index 0000000000..715e9bf0c9 --- /dev/null +++ b/tests/auto/corelib/tools/qhash_strictiterators/qhash_strictiterators.pro @@ -0,0 +1,3 @@ +include(../qhash/qhash.pro) +TARGET = tst_qhash_strictiterators +DEFINES += QT_STRICT_ITERATORS tst_QHash=tst_QHash_StrictIterators diff --git a/tests/auto/corelib/tools/qlist/qlist.pro b/tests/auto/corelib/tools/qlist/qlist.pro index d3f8d83177..43c06e0ee1 100644 --- a/tests/auto/corelib/tools/qlist/qlist.pro +++ b/tests/auto/corelib/tools/qlist/qlist.pro @@ -2,5 +2,5 @@ CONFIG += testcase CONFIG += parallel_test TARGET = tst_qlist QT = core testlib -SOURCES = tst_qlist.cpp +SOURCES = $$PWD/tst_qlist.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/tools/qlist_strictiterators/qlist_strictiterators.pro b/tests/auto/corelib/tools/qlist_strictiterators/qlist_strictiterators.pro new file mode 100644 index 0000000000..e39ad38919 --- /dev/null +++ b/tests/auto/corelib/tools/qlist_strictiterators/qlist_strictiterators.pro @@ -0,0 +1,3 @@ +include(../qlist/qlist.pro) +TARGET = tst_qlist_strictiterators +DEFINES += QT_STRICT_ITERATORS tst_QList=tst_QList_StrictIterators diff --git a/tests/auto/corelib/tools/qmap/qmap.pro b/tests/auto/corelib/tools/qmap/qmap.pro index 5601bc528c..460b6654fb 100644 --- a/tests/auto/corelib/tools/qmap/qmap.pro +++ b/tests/auto/corelib/tools/qmap/qmap.pro @@ -1,5 +1,5 @@ CONFIG += testcase parallel_test TARGET = tst_qmap QT = core testlib -SOURCES = tst_qmap.cpp +SOURCES = $$PWD/tst_qmap.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index dea657f842..e812e5a337 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -39,8 +39,6 @@ ** ****************************************************************************/ -#define QT_STRICT_ITERATORS - #include #include #include diff --git a/tests/auto/corelib/tools/qmap_strictiterators/qmap_strictiterators.pro b/tests/auto/corelib/tools/qmap_strictiterators/qmap_strictiterators.pro new file mode 100644 index 0000000000..6c1f4727c1 --- /dev/null +++ b/tests/auto/corelib/tools/qmap_strictiterators/qmap_strictiterators.pro @@ -0,0 +1,3 @@ +include(../qmap/qmap.pro) +TARGET = tst_qmap_strictiterators +DEFINES += QT_STRICT_ITERATORS tst_QMap=tst_QMap_StrictIterators diff --git a/tests/auto/corelib/tools/qvector/qvector.pro b/tests/auto/corelib/tools/qvector/qvector.pro index 98fd2f2120..22edde3412 100644 --- a/tests/auto/corelib/tools/qvector/qvector.pro +++ b/tests/auto/corelib/tools/qvector/qvector.pro @@ -1,5 +1,5 @@ CONFIG += testcase parallel_test TARGET = tst_qvector QT = core testlib -SOURCES = tst_qvector.cpp +SOURCES = $$PWD/tst_qvector.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/tools/qvector_strictiterators/qvector_strictiterators.pro b/tests/auto/corelib/tools/qvector_strictiterators/qvector_strictiterators.pro new file mode 100644 index 0000000000..d6cad86aac --- /dev/null +++ b/tests/auto/corelib/tools/qvector_strictiterators/qvector_strictiterators.pro @@ -0,0 +1,3 @@ +include(../qvector/qvector.pro) +TARGET = tst_qvector_strictiterators +DEFINES += QT_STRICT_ITERATORS=1 tst_QVector=tst_QVector_StrictIterators diff --git a/tests/auto/corelib/tools/tools.pro b/tests/auto/corelib/tools/tools.pro index 996879ea69..d5c9e50190 100644 --- a/tests/auto/corelib/tools/tools.pro +++ b/tests/auto/corelib/tools/tools.pro @@ -2,6 +2,7 @@ TEMPLATE=subdirs SUBDIRS=\ qalgorithms \ qarraydata \ + qarraydata_strictiterators \ qbitarray \ qbytearray \ qbytearraylist \ @@ -20,11 +21,14 @@ SUBDIRS=\ qexplicitlyshareddatapointer \ qfreelist \ qhash \ + qhash_strictiterators \ qline \ qlinkedlist \ qlist \ + qlist_strictiterators \ qlocale \ qmap \ + qmap_strictiterators \ qmargins \ qmessageauthenticationcode \ qpair \ @@ -54,4 +58,5 @@ SUBDIRS=\ qtimezone \ qtimeline \ qvarlengtharray \ - qvector + qvector \ + qvector_strictiterators -- cgit v1.2.3