diff options
| author | Marc Mutz <[email protected]> | 2025-11-24 11:12:30 +0100 |
|---|---|---|
| committer | Marc Mutz <[email protected]> | 2025-12-10 15:39:22 +0000 |
| commit | d35ae135e60dcdaccc80d4e360e09c59f174134f (patch) | |
| tree | ab32e13bb7af3615f42baace3f450ee55e5cc766 | |
| parent | 8b109c00a7fb5579cb27e16ede4dc59c508527a6 (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.cmake | 4 | ||||
| -rw-r--r-- | src/corelib/kernel/qassociativeiterable.h | 2 | ||||
| -rw-r--r-- | src/corelib/kernel/qsequentialiterable.h | 3 |
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<> |
