From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 582A83858D28; Wed, 9 Feb 2022 19:37:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 582A83858D28 From: "thiago at kde dot org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/104475] New: Wstringop-overflow + atomics incorrect warning on dynamic object Date: Wed, 09 Feb 2022 19:37:19 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: thiago at kde dot org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Feb 2022 19:37:19 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D104475 Bug ID: 104475 Summary: Wstringop-overflow + atomics incorrect warning on dynamic object Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: thiago at kde dot org Target Milestone: --- Created attachment 52399 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D52399&action=3Dedit qfutureinterface.cpp preprocessed In: static inline int switch_on(QAtomicInt &a, int which) { return a.fetchAndOrRelaxed(which) | which; } static inline int switch_off(QAtomicInt &a, int which) { return a.fetchAndAndRelaxed(~which) & ~which; } void QFutureInterfaceBase::setThrottled(bool enable) { QMutexLocker lock(&d->m_mutex); if (enable) { switch_on(d->state, Throttled); } else { switch_off(d->state, Throttled); if (!(d->state.loadRelaxed() & suspendingOrSuspended)) d->pausedWaitCondition.wakeAll(); } } Compiling the attached preprocessed sources with: g++ -Wall -Wextra -march=3Dhaswell -O2 -c -o /dev/null qfutureinterface.cpp= .ii Produces: In member function =E2=80=98std::__atomic_base<_IntTp>::__int_type std::__atomic_base<_IntTp>::fetch_or(__int_type, std::memory_order) [with _= ITp =3D int]=E2=80=99, inlined from =E2=80=98static T QAtomicOps::fetchAndOrRelaxed(std::at= omic&, typename QAtomicAdditiveType::AdditiveT) [with T =3D int; X =3D int]=E2= =80=99 at /home/tjmaciei/obj/qt/qt6/qtbase/include/QtCore/../../../../../../src/qt/qt= 6/qtbase/src/corelib/thread/qatomic_cxx11.h:449:33, inlined from =E2=80=98T QBasicAtomicInteger::fetchAndOrRelaxed(T) [w= ith T =3D int]=E2=80=99 at /home/tjmaciei/obj/qt/qt6/qtbase/include/QtCore/../../../../../../src/qt/qt= 6/qtbase/src/corelib/thread/qbasicatomic.h:168:36, inlined from =E2=80=98int switch_on(QAtomicInt&, int)=E2=80=99 at /home/tjmaciei/src/qt/qt6/qtbase/src/corelib/thread/qfutureinterface.cpp:59= :31, inlined from =E2=80=98void QFutureInterfaceBase::setThrottled(bool)=E2= =80=99 at /home/tjmaciei/src/qt/qt6/qtbase/src/corelib/thread/qfutureinterface.cpp:71= :18: /home/tjmaciei/dev/gcc/include/c++/12.0.1/bits/atomic_base.h:648:33: warnin= g: =E2=80=98unsigned int __atomic_or_fetch_4(volatile void*, unsigned int, int= )=E2=80=99 writing 4 bytes into a region of size 0 overflows the destination [-Wstringop-overflo= w=3D] 648 | { return __atomic_fetch_or(&_M_i, __i, int(__m)); } | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ In member function =E2=80=98std::__atomic_base<_IntTp>::__int_type std::__atomic_base<_IntTp>::fetch_and(__int_type, std::memory_order) [with = _ITp =3D int]=E2=80=99, inlined from =E2=80=98static T QAtomicOps::fetchAndAndRelaxed(std::a= tomic&, typename QAtomicAdditiveType::AdditiveT) [with T =3D int; X =3D int]=E2= =80=99 at /home/tjmaciei/obj/qt/qt6/qtbase/include/QtCore/../../../../../../src/qt/qt= 6/qtbase/src/corelib/thread/qatomic_cxx11.h:425:34, inlined from =E2=80=98T QBasicAtomicInteger::fetchAndAndRelaxed(T) [= with T =3D int]=E2=80=99 at /home/tjmaciei/obj/qt/qt6/qtbase/include/QtCore/../../../../../../src/qt/qt= 6/qtbase/src/corelib/thread/qbasicatomic.h:159:37, inlined from =E2=80=98int switch_off(QAtomicInt&, int)=E2=80=99 at /home/tjmaciei/src/qt/qt6/qtbase/src/corelib/thread/qfutureinterface.cpp:64= :32, inlined from =E2=80=98void QFutureInterfaceBase::setThrottled(bool)=E2= =80=99 at /home/tjmaciei/src/qt/qt6/qtbase/src/corelib/thread/qfutureinterface.cpp:73= :19: /home/tjmaciei/dev/gcc/include/c++/12.0.1/bits/atomic_base.h:638:34: warnin= g: =E2=80=98unsigned int __atomic_fetch_and_4(volatile void*, unsigned int, in= t)=E2=80=99 writing 4 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=3D] 638 | { return __atomic_fetch_and(&_M_i, __i, int(__m)); } | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ GCC Git commit 1ce5395977f37e8d0c03394f7b932a584ce85cc7, built today.=