summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <[email protected]>2025-11-24 11:12:30 +0100
committerMarc Mutz <[email protected]>2025-12-10 15:39:22 +0000
commitd35ae135e60dcdaccc80d4e360e09c59f174134f (patch)
treeab32e13bb7af3615f42baace3f450ee55e5cc766
parent8b109c00a7fb5579cb27e16ede4dc59c508527a6 (diff)
Add GCC -Wnrvo to headersclean
As started by Allan, this patch completes the job by adding -Wnrvo to headers-clean, so the functions treated in [1] won't get un-NRVO'ed again. [1] e2d19b9b8f4f7b87a0a4bfe5b6afd1395685ba20 Fixes: QTBUG-142146 Pick-to: 6.11 Change-Id: I4a1be1e20e2e32ad2f7068681e5f1f7153d62745 Reviewed-by: Thiago Macieira <[email protected]>
-rw-r--r--cmake/QtHeadersClean.cmake4
-rw-r--r--src/corelib/kernel/qassociativeiterable.h2
-rw-r--r--src/corelib/kernel/qsequentialiterable.h3
3 files changed, 9 insertions, 0 deletions
diff --git a/cmake/QtHeadersClean.cmake b/cmake/QtHeadersClean.cmake
index 3e59d68629c..9d8c86cf70d 100644
--- a/cmake/QtHeadersClean.cmake
+++ b/cmake/QtHeadersClean.cmake
@@ -137,6 +137,10 @@ function(qt_internal_add_headersclean_target module_target module_headers)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
list(APPEND hcleanFLAGS -Wzero-as-null-pointer-constant
-Wdouble-promotion -Wfloat-conversion)
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0")
+ list(APPEND hcleanFLAGS
+ -Wnrvo)
+ endif()
endif()
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang|IntelLLVM")
diff --git a/src/corelib/kernel/qassociativeiterable.h b/src/corelib/kernel/qassociativeiterable.h
index 39f66d45fa0..4f9bbf67bfb 100644
--- a/src/corelib/kernel/qassociativeiterable.h
+++ b/src/corelib/kernel/qassociativeiterable.h
@@ -156,10 +156,12 @@ inline QVariantRef<QAssociativeIterator>::operator QVariant() const
if (!metaType.isValid())
return m_pointer->key();
+ return [&] {
QVariant v(metaType);
metaAssociation.mappedAtIterator(m_pointer->constIterator(),
metaType == QMetaType::fromType<QVariant>() ? &v : v.data());
return v;
+ }();
}
template<>
diff --git a/src/corelib/kernel/qsequentialiterable.h b/src/corelib/kernel/qsequentialiterable.h
index 92252cb19dd..76908bdae4b 100644
--- a/src/corelib/kernel/qsequentialiterable.h
+++ b/src/corelib/kernel/qsequentialiterable.h
@@ -142,10 +142,13 @@ inline QVariantRef<QSequentialIterator>::operator QVariant() const
if (m_pointer == nullptr)
return QVariant();
const QMetaType metaType(m_pointer->metaContainer().valueMetaType());
+
+ return [&] {
QVariant v(metaType);
void *dataPtr = metaType == QMetaType::fromType<QVariant>() ? &v : v.data();
m_pointer->metaContainer().valueAtIterator(m_pointer->constIterator(), dataPtr);
return v;
+ }();
}
template<>