qt5base-lts/tests/auto/corelib/tools
Marc Mutz e297e80fd0 QVarLengthArray: make reallocation strongly exception safe
The old code had several bugs:

- it immediately clobbered *this with new state, before having copied
  over the elements from the old to the new buffer

- when buffer relocation threw, it would keep the new (partially-filled)
  buffer and throw away the old

- it unconditionally used std::move() for non-relocatable types, making
  it impossible to restore the original buffer when a move throws

Instead of clobbering *this with new state, do all the work on the
side and change *this only once the reallocation has happened
successfully.

Also use q_uninitialized_relocate_n() and unique_ptr in the
implementation to simplify the code. The former got the necessary
update to use std::move_if_noexcept() instead of an unconditional
std::move() for the non-relocatable case.

[ChangeLog][QtCore][QVarLengthArray] The append()-like functions are
now strongly exception safe. This means reallocation will now use
copies instead of moves, unless the value_type has a noexcept move
constructor.

Fixes: QTBUG-99039
Change-Id: I031251b8d14ac045592d01caed59d4638c3d9892
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-12-09 18:59:55 +00:00
..
collections Q(Multi)Map: prevent dangling key/value after detach() 2021-11-26 02:14:52 +01:00
containerapisymmetry Fix gcc warnings from having only one of assignment/copy 2021-04-11 19:53:51 +02:00
qalgorithms Remove the qmake project files 2021-01-07 15:32:28 +01:00
qarraydata Fix signed/unsigned comparison warnings in tst_QArrayData 2021-10-29 14:11:46 +02:00
qbitarray Remove the qmake project files 2021-01-07 15:32:28 +01:00
qcache Fix gcc warnings from having only one of assignment/copy 2021-04-11 19:53:51 +02:00
qcommandlineparser Compile autotests for Integrity 2021-09-20 17:29:04 +03:00
qcontiguouscache Remove the qmake project files 2021-01-07 15:32:28 +01:00
qcryptographichash Remove conditioning on Android embedded 2021-09-17 17:30:14 +02:00
qduplicatetracker QDuplicateTracker: add clear() 2021-11-11 13:26:14 -08:00
qeasingcurve Remove the qmake project files 2021-01-07 15:32:28 +01:00
qexplicitlyshareddatapointer Remove the qmake project files 2021-01-07 15:32:28 +01:00
qflatmap Remove the qmake project files 2021-01-07 15:32:28 +01:00
qfreelist CMake: Remove the usage of QT_SOURCE_TREE from tests 2021-07-12 18:56:14 +02:00
qhash QMultiHash: fix erase returning the wrong iterator 2021-12-07 03:07:49 +01:00
qhashfunctions QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH: use unqualified qHash() lookup 2021-11-29 18:55:10 +00:00
qhashseed tst_QHashSeed: improve quality of the quality() test 2021-11-23 20:48:08 -08:00
qline Remove the qmake project files 2021-01-07 15:32:28 +01:00
qlist QList: avoid a iterator->pointer conversion in the test 2021-10-14 02:26:41 +02:00
qmacautoreleasepool Remove the qmake project files 2021-01-07 15:32:28 +01:00
qmakearray Remove the qmake project files 2021-01-07 15:32:28 +01:00
qmap QMap: add operator+ and - for iterators 2021-07-27 23:48:29 +02:00
qmargins Remove the qmake project files 2021-01-07 15:32:28 +01:00
qmessageauthenticationcode Remove the qmake project files 2021-01-07 15:32:28 +01:00
qoffsetstringarray qlibraryinfo.cpp: use qOffsetStringArray for qtConfEntries 2021-11-03 14:54:37 -07:00
qpair Remove the qmake project files 2021-01-07 15:32:28 +01:00
qpoint Remove the qmake project files 2021-01-07 15:32:28 +01:00
qpointf Remove the qmake project files 2021-01-07 15:32:28 +01:00
qqueue Remove the qmake project files 2021-01-07 15:32:28 +01:00
qrect Remove the qmake project files 2021-01-07 15:32:28 +01:00
qringbuffer Remove the qmake project files 2021-01-07 15:32:28 +01:00
qscopedpointer Disable warnings from using deprecated QScopedPointer::take 2021-02-13 06:44:52 +01:00
qscopedvaluerollback Remove the qmake project files 2021-01-07 15:32:28 +01:00
qscopeguard Remove checks for features available in C++17 2021-10-02 17:54:39 +02:00
qset Remove checks for features available in C++17 2021-10-02 17:54:39 +02:00
qsharedpointer Long live QVERIFY_THROWS_EXCEPTION! 2021-11-26 04:44:26 +01:00
qsize Add more support for structured bindings 2021-02-25 16:08:44 +01:00
qsizef Add more support for structured bindings 2021-02-25 16:08:44 +01:00
qstl Remove the qmake project files 2021-01-07 15:32:28 +01:00
qtaggedpointer Remove the qmake project files 2021-01-07 15:32:28 +01:00
qtimeline Port of QTimeLine to new property system 2021-04-26 16:44:54 +02:00
qvarlengtharray QVarLengthArray: make reallocation strongly exception safe 2021-12-09 18:59:55 +00:00
qversionnumber Remove the qmake project files 2021-01-07 15:32:28 +01:00
CMakeLists.txt Compile autotests for Integrity 2021-09-20 17:29:04 +03:00