qcam: Silence false positive warnings with Qt 6.9.0 and newer
diff mbox series

Message ID 20250723223914.23733-1-laurent.pinchart@ideasonboard.com
State New
Headers show
Series
  • qcam: Silence false positive warnings with Qt 6.9.0 and newer
Related show

Commit Message

Laurent Pinchart July 23, 2025, 10:39 p.m. UTC
In Qt 6.9.0 the qtmochelpers.h header introduced a construct that gcc 12
and gcc 13 incorrectly flag as variable shadowing:

In file included from src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:12:
/usr/include/qt6/QtCore/qtmochelpers.h: In instantiation of ‘constexpr void QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, Idx ...>, T ...>::forEach(F&&) const [with F = QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(QtMocHelpers::MetaObjectContents<24, 10, 60, 3>&, size_t, uint&) const::<lambda(const auto:39&)>; int ...Idx = {0}; T = {QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)>}]’:
/usr/include/qt6/QtCore/qtmochelpers.h:255:21:   required from ‘constexpr const QtMocHelpers::MetaObjectContents<24, 10, 60, 3> ViewFinderGL::qt_staticMetaObjectContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   required from ‘constexpr const auto ViewFinderGL::qt_staticMetaObjectStaticContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:63:5:   required from here
src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   in ‘constexpr’ expansion of ‘ViewFinderGL::qt_create_metaobjectdata<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>()’
src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:58:87:   in ‘constexpr’ expansion of ‘QtMocHelpers::metaObjectData<ViewFinderGL, {anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, StringRefStorage<char [13], char [15], char [1], char [24], char [7]>, UintData<SignalData<void(libcamera::FrameBuffer*)> >, UintData<>, UintData<> >(0, qt_stringData, qt_methods, qt_properties, qt_enums, QtMocHelpers::UintData<>(), const QtMocHelpers::detail::UintDataBlock<0, 0>{uint [1](), uint [1]()})’
/usr/include/qt6/QtCore/qtmochelpers.h:563:36:   in ‘constexpr’ expansion of ‘(& methods)->QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(result, ((size_t)dataoffset), metatypeoffset)’
/usr/include/qt6/QtCore/qtmochelpers.h:201:57: error: declaration of ‘entry’ shadows a member of ‘QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, 0>, QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >’ [-Werror=shadow]
  201 |         [[maybe_unused]] auto invoke = [&f](const auto &entry) { f(entry.entry); return 0; };
      |                                             ~~~~~~~~~~~~^~~~~
/usr/include/qt6/QtCore/qtmochelpers.h:180:7: note: shadowed declaration is here
  180 |     T entry;
      |       ^~~~~

There is little we can do but silence the warning. Do so selectively
based on the Qt and gcc versions, to still detect variable shadowing
with compilers unaffected by the issue.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/apps/qcam/meson.build | 7 +++++++
 1 file changed, 7 insertions(+)


base-commit: b65df7e7554b45e2d3d7fdb5b37c2ab7df3db4fe

Comments

Umang Jain July 24, 2025, 3:26 a.m. UTC | #1
On Thu, Jul 24, 2025 at 01:39:14AM +0300, Laurent Pinchart wrote:
> In Qt 6.9.0 the qtmochelpers.h header introduced a construct that gcc 12
> and gcc 13 incorrectly flag as variable shadowing:
> 
> In file included from src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:12:
> /usr/include/qt6/QtCore/qtmochelpers.h: In instantiation of ‘constexpr void QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, Idx ...>, T ...>::forEach(F&&) const [with F = QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(QtMocHelpers::MetaObjectContents<24, 10, 60, 3>&, size_t, uint&) const::<lambda(const auto:39&)>; int ...Idx = {0}; T = {QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)>}]’:
> /usr/include/qt6/QtCore/qtmochelpers.h:255:21:   required from ‘constexpr const QtMocHelpers::MetaObjectContents<24, 10, 60, 3> ViewFinderGL::qt_staticMetaObjectContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
> src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   required from ‘constexpr const auto ViewFinderGL::qt_staticMetaObjectStaticContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
> src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:63:5:   required from here
> src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   in ‘constexpr’ expansion of ‘ViewFinderGL::qt_create_metaobjectdata<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>()’
> src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:58:87:   in ‘constexpr’ expansion of ‘QtMocHelpers::metaObjectData<ViewFinderGL, {anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, StringRefStorage<char [13], char [15], char [1], char [24], char [7]>, UintData<SignalData<void(libcamera::FrameBuffer*)> >, UintData<>, UintData<> >(0, qt_stringData, qt_methods, qt_properties, qt_enums, QtMocHelpers::UintData<>(), const QtMocHelpers::detail::UintDataBlock<0, 0>{uint [1](), uint [1]()})’
> /usr/include/qt6/QtCore/qtmochelpers.h:563:36:   in ‘constexpr’ expansion of ‘(& methods)->QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(result, ((size_t)dataoffset), metatypeoffset)’
> /usr/include/qt6/QtCore/qtmochelpers.h:201:57: error: declaration of ‘entry’ shadows a member of ‘QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, 0>, QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >’ [-Werror=shadow]
>   201 |         [[maybe_unused]] auto invoke = [&f](const auto &entry) { f(entry.entry); return 0; };
>       |                                             ~~~~~~~~~~~~^~~~~
> /usr/include/qt6/QtCore/qtmochelpers.h:180:7: note: shadowed declaration is here
>   180 |     T entry;
>       |       ^~~~~
> 

Yes, this seems really awkward. :-(

> There is little we can do but silence the warning. Do so selectively
> based on the Qt and gcc versions, to still detect variable shadowing
> with compilers unaffected by the issue.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Umang Jain <uajain@igalia.com>

> ---
>  src/apps/qcam/meson.build | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build
> index f7c140643373..9ca047b0f927 100644
> --- a/src/apps/qcam/meson.build
> +++ b/src/apps/qcam/meson.build
> @@ -42,6 +42,13 @@ qt6_cpp_args = [
>      '-Wno-extra-semi',
>  ]
>  
> +# gcc 12 and 13 output a false positive variable shadowing warning with Qt
> +# 6.9.0 and newer. Silence it.
> +if qt6_dep.version().version_compare('>=6.9.0') and \
> +   cxx.version().version_compare('>=12') and cxx.version().version_compare('<14')
> +    qt6_cpp_args += ['-Wno-shadow']
> +endif
> +
>  resources = qt6.preprocess(moc_headers : qcam_moc_headers,
>                             qresources : qcam_resources,
>                             dependencies : qt6_dep)
> 
> base-commit: b65df7e7554b45e2d3d7fdb5b37c2ab7df3db4fe
> -- 
> Regards,
> 
> Laurent Pinchart
>
Paul Elder July 24, 2025, 7:03 a.m. UTC | #2
Quoting Laurent Pinchart (2025-07-24 07:39:14)
> In Qt 6.9.0 the qtmochelpers.h header introduced a construct that gcc 12
> and gcc 13 incorrectly flag as variable shadowing:
> 
> In file included from src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:12:
> /usr/include/qt6/QtCore/qtmochelpers.h: In instantiation of ‘constexpr void QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, Idx ...>, T ...>::forEach(F&&) const [with F = QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(QtMocHelpers::MetaObjectContents<24, 10, 60, 3>&, size_t, uint&) const::<lambda(const auto:39&)>; int ...Idx = {0}; T = {QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)>}]’:
> /usr/include/qt6/QtCore/qtmochelpers.h:255:21:   required from ‘constexpr const QtMocHelpers::MetaObjectContents<24, 10, 60, 3> ViewFinderGL::qt_staticMetaObjectContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
> src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   required from ‘constexpr const auto ViewFinderGL::qt_staticMetaObjectStaticContent<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>’
> src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:63:5:   required from here
> src/apps/qcam/qcam.p/../../../../../../src/apps/qcam/viewfinder_gl.h:32:2:   in ‘constexpr’ expansion of ‘ViewFinderGL::qt_create_metaobjectdata<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t>()’
> src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:58:87:   in ‘constexpr’ expansion of ‘QtMocHelpers::metaObjectData<ViewFinderGL, {anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, StringRefStorage<char [13], char [15], char [1], char [24], char [7]>, UintData<SignalData<void(libcamera::FrameBuffer*)> >, UintData<>, UintData<> >(0, qt_stringData, qt_methods, qt_properties, qt_enums, QtMocHelpers::UintData<>(), const QtMocHelpers::detail::UintDataBlock<0, 0>{uint [1](), uint [1]()})’
> /usr/include/qt6/QtCore/qtmochelpers.h:563:36:   in ‘constexpr’ expansion of ‘(& methods)->QtMocHelpers::UintData<QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >::copyTo<{anonymous}::qt_meta_tag_ZN12ViewFinderGLE_t, QtMocHelpers::MetaObjectContents<24, 10, 60, 3> >(result, ((size_t)dataoffset), metatypeoffset)’
> /usr/include/qt6/QtCore/qtmochelpers.h:201:57: error: declaration of ‘entry’ shadows a member of ‘QtMocHelpers::detail::UintDataStorage<std::integer_sequence<int, 0>, QtMocHelpers::SignalData<void(libcamera::FrameBuffer*)> >’ [-Werror=shadow]
>   201 |         [[maybe_unused]] auto invoke = [&f](const auto &entry) { f(entry.entry); return 0; };
>       |                                             ~~~~~~~~~~~~^~~~~
> /usr/include/qt6/QtCore/qtmochelpers.h:180:7: note: shadowed declaration is here
>   180 |     T entry;
>       |       ^~~~~
> 
> There is little we can do but silence the warning. Do so selectively
> based on the Qt and gcc versions, to still detect variable shadowing
> with compilers unaffected by the issue.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  src/apps/qcam/meson.build | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build
> index f7c140643373..9ca047b0f927 100644
> --- a/src/apps/qcam/meson.build
> +++ b/src/apps/qcam/meson.build
> @@ -42,6 +42,13 @@ qt6_cpp_args = [
>      '-Wno-extra-semi',
>  ]
>  
> +# gcc 12 and 13 output a false positive variable shadowing warning with Qt
> +# 6.9.0 and newer. Silence it.
> +if qt6_dep.version().version_compare('>=6.9.0') and \
> +   cxx.version().version_compare('>=12') and cxx.version().version_compare('<14')
> +    qt6_cpp_args += ['-Wno-shadow']
> +endif
> +
>  resources = qt6.preprocess(moc_headers : qcam_moc_headers,
>                             qresources : qcam_resources,
>                             dependencies : qt6_dep)
> 
> base-commit: b65df7e7554b45e2d3d7fdb5b37c2ab7df3db4fe
> -- 
> Regards,
> 
> Laurent Pinchart
>

Patch
diff mbox series

diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build
index f7c140643373..9ca047b0f927 100644
--- a/src/apps/qcam/meson.build
+++ b/src/apps/qcam/meson.build
@@ -42,6 +42,13 @@  qt6_cpp_args = [
     '-Wno-extra-semi',
 ]
 
+# gcc 12 and 13 output a false positive variable shadowing warning with Qt
+# 6.9.0 and newer. Silence it.
+if qt6_dep.version().version_compare('>=6.9.0') and \
+   cxx.version().version_compare('>=12') and cxx.version().version_compare('<14')
+    qt6_cpp_args += ['-Wno-shadow']
+endif
+
 resources = qt6.preprocess(moc_headers : qcam_moc_headers,
                            qresources : qcam_resources,
                            dependencies : qt6_dep)