From 669124284cef25eb6c3ee6dfa0c5298511a3cf21 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 1 Jun 2022 13:18:32 +0200 Subject: QQmlListCompositor: suppress GCC 12 -Warray-bounds warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Despite my best efforts in teaching GCC 12 to understand that groupCount is always <= MaxGroupCount, it continued to issue these warnings: In member function ‘void QQmlListCompositor::iterator::incrementIndexes(int, uint)’, inlined from ‘void QQmlListCompositor::iterator::incrementIndexes(int)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:138:65, inlined from ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector*, QVector*)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor.cpp:852:40: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:336:20: error: array subscript 28 is above array bounds of ‘int [11]’ [-Werror=array-bounds] 336 | index[i] += difference; | ~~~~~~~^ qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h: In member function ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector*, QVector*)’: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:154:13: note: while referencing ‘QQmlListCompositor::iterator::index’ 154 | int index[MaximumGroupCount] = { 0 }; | ^~~~~ In member function ‘void QQmlListCompositor::iterator::incrementIndexes(int, uint)’, inlined from ‘void QQmlListCompositor::iterator::incrementIndexes(int)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:138:65, inlined from ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector*, QVector*)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor.cpp:852:40: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:336:20: error: array subscript 28 is above array bounds of ‘int [11]’ [-Werror=array-bounds] 336 | index[i] += difference; | ~~~~~~~^ qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h: In member function ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector*, QVector*)’: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:154:13: note: while referencing ‘QQmlListCompositor::iterator::index’ 154 | int index[MaximumGroupCount] = { 0 }; | ^~~~~ cc1plus: all warnings being treated as errors Therefore, I see no other solution than to suppress the warning the hard way. Fixes: QTBUG-103924 Change-Id: Ic46009daa35357c6e6bb0fd1c16d020e360b7525 Reviewed-by: Thiago Macieira (cherry picked from commit 80f0bf64e49f07a73712998ddc8a0eebd1b660b6) Reviewed-by: Ulf Hermann --- src/qmlmodels/qqmllistcompositor_p.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/qmlmodels/qqmllistcompositor_p.h') diff --git a/src/qmlmodels/qqmllistcompositor_p.h b/src/qmlmodels/qqmllistcompositor_p.h index 80de0be349..27e8a5b429 100644 --- a/src/qmlmodels/qqmllistcompositor_p.h +++ b/src/qmlmodels/qqmllistcompositor_p.h @@ -311,6 +311,10 @@ Q_DECLARE_TYPEINFO(QQmlListCompositor::Insert, Q_PRIMITIVE_TYPE); inline QQmlListCompositor::iterator::iterator() {} +QT_WARNING_PUSH +// GCC isn't wrong, as groupCount is public in iterator, but we tried Q_ASSUME(), +// right in front of the loops, and it didn't help, so we disable the warning: +QT_WARNING_DISABLE_GCC("-Warray-bounds") inline QQmlListCompositor::iterator::iterator( Range *range, int offset, Group group, int groupCount) : range(range) @@ -338,6 +342,7 @@ inline void QQmlListCompositor::iterator::decrementIndexes(int difference, uint index[i] -= difference; } } +QT_WARNING_POP // -Warray-bounds inline QQmlListCompositor::insert_iterator::insert_iterator( Range *range, int offset, Group group, int groupCount) -- cgit v1.2.3