From ac328eec8d227958961ca29379ff0b869435aedc Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 7 Jul 2023 07:48:40 +0200 Subject: [PATCH] QAtomicScopedValueRollback: fix CTAD for Q(Basic)AtomicPointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need deduction guides to turn the AtomicPointer template argument (the pointee) into a pointer: QAtomicPointer → QAtomicScopedValueRollback Extend a test to cover pointers, too. Fixes: QTBUG-115105 Change-Id: Ib416c6a43e4da480b707a0bf6a10d186bbaad163 Reviewed-by: Qt CI Bot Reviewed-by: Fabian Kosmale (cherry picked from commit 97ec1d7d8ecb07be20cf43f475067faba04f5aa5) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/tools/qatomicscopedvaluerollback_p.h | 7 +++++++ .../tst_qatomicscopedvaluerollback.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/corelib/tools/qatomicscopedvaluerollback_p.h b/src/corelib/tools/qatomicscopedvaluerollback_p.h index 67299327fcd..a5c1a2fa611 100644 --- a/src/corelib/tools/qatomicscopedvaluerollback_p.h +++ b/src/corelib/tools/qatomicscopedvaluerollback_p.h @@ -108,6 +108,13 @@ public: } }; +template +QAtomicScopedValueRollback(QBasicAtomicPointer &) + -> QAtomicScopedValueRollback; +template +QAtomicScopedValueRollback(QBasicAtomicPointer &, std::memory_order) + -> QAtomicScopedValueRollback; + QT_END_NAMESPACE #endif // QATOMICASCOPEDVALUEROLLBACK_P_H diff --git a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp index 81d8242f71a..8a56d957bd2 100644 --- a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp +++ b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp @@ -24,23 +24,30 @@ void tst_QAtomicScopedValueRollback::leavingScope() QAtomicInt i = 0; QBasicAtomicInteger b = false; std::atomic b2 = false; + int x = 0, y = 42; + QBasicAtomicPointer p = &x; //test rollback on going out of scope { QAtomicScopedValueRollback ri(i); QAtomicScopedValueRollback rb(b); QAtomicScopedValueRollback rb2(b2, true); + QAtomicScopedValueRollback rp(p); QCOMPARE(b.loadRelaxed(), false); QCOMPARE(b2, true); QCOMPARE(i.loadRelaxed(), 0); + QCOMPARE(p.loadRelaxed(), &x); b.storeRelaxed(true); i.storeRelaxed(1); + p.storeRelaxed(&y); QCOMPARE(b.loadRelaxed(), true); QCOMPARE(i.loadRelaxed(), 1); + QCOMPARE(p.loadRelaxed(), &y); } QCOMPARE(b.loadRelaxed(), false); QCOMPARE(b2, false); QCOMPARE(i.loadRelaxed(), 0); + QCOMPARE(p.loadRelaxed(), &x); } void tst_QAtomicScopedValueRollback::leavingScopeAfterCommit()