path: root/src/corelib/global
diff options
authorGiuseppe D'Angelo <>2020-11-23 09:08:10 +0100
committerQt Cherry-pick Bot <>2020-12-01 21:41:51 +0000
commit0943ad02419f6215915e4a7c98949d1fd9b08c45 (patch)
treec4a9e0134b70ae6925fc624fbfbdba8a247029d1 /src/corelib/global
parent28b015342d000b8487c853153f1d93606d3c2add (diff)
Containers: call constructors even for primitive types
Trivial types are automatically classified as Q_PRIMITIVE_TYPE, but it doesn't mean that they can be initialized with memset(0) (notably, pointers to data members on Itanium ABIs are initialized with -1, not 0). Drop that kind of optimization, and always value-initialize objects in containers. Fix the documentation to match as well. This is a rework of f6f68409a40beaa5f034c411dd7e296c7828d8fd and 82b13880b994ff9b87710e0729e32035ab3b63a4 in Qt 6. [ChangeLog][QtCore][QTypeInfo] The semantics of Q_PRIMITIVE_TYPE have been slightly changed. Qt now value-initializes types marked as primitive (which, by default, include trivial types) instead of simply using memset(0), which is wrong in some corner cases. Change-Id: Ib61396be883424e2f03a9f3bbce1eaddce6aa731 Reviewed-by: Volker Hilsheimer <> Reviewed-by: Lars Knoll <> (cherry picked from commit 76671a57b5418ec98fe2c94a963728ac3306dc82) Reviewed-by: Qt Cherry-pick Bot <>
Diffstat (limited to 'src/corelib/global')
1 files changed, 2 insertions, 4 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 51b8379b3d..12d76c0dca 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -4030,10 +4030,8 @@ bool qunsetenv(const char *varName)
\li \c Q_PRIMITIVE_TYPE specifies that \a Type is a POD (plain old
- data) type with no constructor or destructor, or else a type where
- every bit pattern is a valid object; memset()ting memory to zero
- creates a value-initialized instance of the type; and memcpy()ing
- creates a valid independent copy of an object.
+ data) type with no constructor or destructor, and for which memcpy()ing
+ creates a valid independent copy of the object.
\li \c Q_MOVABLE_TYPE specifies that \a Type has a constructor
and/or a destructor but can be moved in memory using \c
memcpy(). Note: despite the name, this has nothing to do with move