Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 583662

Summary: dev-qt/qtgui-4.8.7 with gcc-6: error: invalid conversion from ‘int’ to ‘QFlags<QItemSelectionModel::SelectionFlag>::Zero
Product: Gentoo Linux Reporter: Mark Wright <gienah>
Component: Current packagesAssignee: Qt Bug Alias <qt>
Status: RESOLVED FIXED    
Severity: normal CC: alex.iris.parker, anthonyryan1, carlphilippreh, fturco, matthew
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 582084    
Attachments: qtgui-4.8.7-gcc-6.0.patch

Description Mark Wright gentoo-dev 2016-05-21 13:26:43 UTC
Created attachment 434858 [details, diff]
qtgui-4.8.7-gcc-6.0.patch

Compiling with gcc 6.1.0 fails with this error:

/var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp: In member function ‘virtual bool QAccessibleTable2::unselectColumn(int)’:
/var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:105: error: conversion from ‘int’ to ‘QItemSelectionModel::SelectionFlags {aka QFlags<QItemSelectionModel::SelectionFlag>}’ is ambiguous
     view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
                                                                                                         ^
In file included from ../../../../include/QtCore/qglobal.h:1:0,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qnamespace.h:45,
                 from ../../../../include/QtCore/qnamespace.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobjectdefs.h:45,
                 from ../../../../include/QtCore/qobjectdefs.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobject.h:47,
                 from ../../../../include/QtCore/qobject.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qpointer.h:45,
                 from ../../../../include/QtCore/qpointer.h:1,
                 from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.h:45,
                 from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:42:
../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2436:29: note: candidate: constexpr QFlags<Enum>::QFlags(QFlags<Enum>::Zero) [with Enum = QItemSelectionModel::SelectionFlag; QFlags<Enum>::Zero = void**] <near match>
     Q_DECL_CONSTEXPR inline QFlags(Zero = 0) : i(0) {}
                             ^~~~~~
../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2436:29: note:   conversion of argument 1 would be ill-formed:
/var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:74: error: invalid conversion from ‘int’ to ‘QFlags<QItemSelectionModel::SelectionFlag>::Zero {aka void**}’ [-fpermissive]
     view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
In file included from ../../../../include/QtCore/qglobal.h:1:0,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qnamespace.h:45,
                 from ../../../../include/QtCore/qnamespace.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobjectdefs.h:45,
                 from ../../../../include/QtCore/qobjectdefs.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobject.h:47,
                 from ../../../../include/QtCore/qobject.h:1,
                 from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qpointer.h:45,
                 from ../../../../include/QtCore/qpointer.h:1,
                 from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.h:45,
                 from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:42:
../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2435:29: note: candidate: constexpr QFlags<Enum>::QFlags(Enum) [with Enum = QItemSelectionModel::SelectionFlag] <near match>
     Q_DECL_CONSTEXPR inline QFlags(Enum f) : i(f) {}
                             ^~~~~~
../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2435:29: note:   conversion of argument 1 would be ill-formed:
/var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:74: error: invalid conversion from ‘int’ to ‘QItemSelectionModel::SelectionFlag’ [-fpermissive]
     view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
Comment 1 Matthew Dawson 2016-11-06 07:30:07 UTC
I looked into this bug some myself, and I think this whole block of code is incorrect as it doesn't make sense.  Anding these two flags together will give a value of 0, causing the function to do nothing, instead of the intended unselecting the column.  However, the behvaiour has been this way since the code was introduced, so changing it might break other code which I can understand the Gentoo devs not wanting to risk on such an old library.

Looking at the best Qt5 equivalent version, the Qt devs do use an or operation as one would expect here.  So it does seem to be a bug, not a feature.  The change was done here: https://codereview.qt-project.org/#/c/42715/ .

The patch as attached should work otherwise.  If you want this patch instead, would it help to submit a PR on Github with it with a revbump?