From 4fc539bd846f08c5e448810e263f3850593b8dc2 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Fri, 3 Jul 2020 01:58:26 +0200 Subject: [PATCH] QMap: fix insert() rvalue overloads Receiving an rvalue still requires to check whether the parameter is detached, otherwise we can't steal its backing std::map. Change-Id: Ie88dbf39fd777112ad7bb20a46d5c2d65be8eb3d Reviewed-by: Thiago Macieira --- src/corelib/tools/qmap.h | 12 +++ tests/auto/corelib/tools/qmap/tst_qmap.cpp | 97 ++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h index 2a87912c4a..9db8981bf5 100644 --- a/src/corelib/tools/qmap.h +++ b/src/corelib/tools/qmap.h @@ -655,6 +655,12 @@ public: if (!map.d || map.d->m.empty()) return; + if (map.d.isShared()) { + // fall back to a regular copy + insert(map); + return; + } + detach(); #ifdef __cpp_lib_node_extract @@ -1292,6 +1298,12 @@ public: if (!map.d || map.d->m.empty()) return; + if (map.d.isShared()) { + // fall back to a regular copy + insert(map); + return; + } + detach(); #ifdef __cpp_lib_node_extract diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index c8a228f8dd..4f7ac08c2d 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -1205,6 +1205,100 @@ void tst_QMap::insert() } } +template