mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-04 08:15:30 +08:00
6.5.3 clean
This commit is contained in:
@ -13,6 +13,7 @@ class tst_QFutureSynchronizer : public QObject
|
||||
|
||||
private Q_SLOTS:
|
||||
void construction();
|
||||
void setFutureAliasingExistingMember();
|
||||
void addFuture();
|
||||
void cancelOnWait();
|
||||
void clearFutures();
|
||||
@ -33,6 +34,38 @@ void tst_QFutureSynchronizer::construction()
|
||||
QCOMPARE(synchronizerWithFuture.futures().size(), 1);
|
||||
}
|
||||
|
||||
void tst_QFutureSynchronizer::setFutureAliasingExistingMember()
|
||||
{
|
||||
//
|
||||
// GIVEN: a QFutureSynchronizer with one QFuture:
|
||||
//
|
||||
QFutureSynchronizer synchronizer(QtFuture::makeReadyFuture(42));
|
||||
|
||||
//
|
||||
// WHEN: calling setFuture() with an alias of the QFuture already in `synchronizer`:
|
||||
//
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
// The next line triggers -Wdangling-reference, but it's a FP because
|
||||
// of implicit sharing. We cannot keep a copy of synchronizer.futures()
|
||||
// around to avoid the warning, as the extra copy would cause a detach()
|
||||
// of m_futures inside setFuture() with the consequence that `f` no longer
|
||||
// aliases an element in m_futures, which is the goal of this test.
|
||||
QT_WARNING_PUSH
|
||||
#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1301
|
||||
QT_WARNING_DISABLE_GCC("-Wdangling-reference")
|
||||
#endif
|
||||
const auto &f = synchronizer.futures().constFirst();
|
||||
QT_WARNING_POP
|
||||
synchronizer.setFuture(f);
|
||||
}
|
||||
|
||||
//
|
||||
// THEN: it didn't crash
|
||||
//
|
||||
QCOMPARE(synchronizer.futures().size(), 1);
|
||||
QCOMPARE(synchronizer.futures().constFirst().result(), 42);
|
||||
}
|
||||
|
||||
void tst_QFutureSynchronizer::addFuture()
|
||||
{
|
||||
QFutureSynchronizer<void> synchronizer;
|
||||
|
Reference in New Issue
Block a user