QSemaphore: Fix warnings about shift exceeding size on 32-bit

error: right shift count >= width of type [-Werror=shift-count-overflow]

Pick-to: 6.4
Fixes: QTBUG-105687
Change-Id: Ic6547f8247454b47baa8fffd170bd9cd0e2a8ca3
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
Thiago Macieira 2022-08-16 07:32:42 -07:00
parent e163c49435
commit 1022922037

View File

@ -161,7 +161,7 @@ futexSemaphoreTryAcquire_loop(QBasicAtomicInteger<quintptr> &u, quintptr curValu
if constexpr (futexHasWaiterCount) { if constexpr (futexHasWaiterCount) {
Q_ASSERT(n > 1); Q_ASSERT(n > 1);
ptr = futexHigh32(&u); ptr = futexHigh32(&u);
curValue >>= 32; curValue = quint64(curValue) >> 32;
} }
} }
@ -213,7 +213,8 @@ template <bool IsTimed> bool futexSemaphoreTryAcquire(QBasicAtomicInteger<quintp
if constexpr (futexHasWaiterCount) { if constexpr (futexHasWaiterCount) {
// We don't use the fetched value from above so futexWait() fails if // We don't use the fetched value from above so futexWait() fails if
// it changed after the testAndSetOrdered above. // it changed after the testAndSetOrdered above.
if (((curValue >> 32) & 0x7fffffffU) == 0x7fffffffU) { quint32 waiterCount = (quint64(curValue) >> 32) & 0x7fffffffU;
if (waiterCount == 0x7fffffffU) {
qCritical() << "Waiter count overflow in QSemaphore"; qCritical() << "Waiter count overflow in QSemaphore";
return false; return false;
} }