summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qvariant.h1
-rw-r--r--src/corelib/kernel/qvariant_p.h8
2 files changed, 8 insertions, 1 deletions
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 1fd304e772..d93df46275 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -78,6 +78,7 @@ public:
private:
inline PrivateShared() : ref(1) { }
public:
+ static size_t computeAllocationSize(size_t size, size_t align);
static PrivateShared *create(size_t size, size_t align);
static void free(PrivateShared *p);
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index f5f4d0fb8a..8787f140f8 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -34,7 +34,7 @@ customConstructShared(size_t size, size_t align, F &&construct)
return ptr.release();
}
-inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, size_t align)
+inline size_t QVariant::PrivateShared::computeAllocationSize(size_t size, size_t align)
{
size += sizeof(PrivateShared);
if (align > sizeof(PrivateShared)) {
@@ -44,6 +44,12 @@ inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, siz
// alignment.
size += align - sizeof(PrivateShared);
}
+ return size;
+}
+
+inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, size_t align)
+{
+ size = computeAllocationSize(size, align);
void *data = operator new(size);
auto *ps = new (data) QVariant::PrivateShared();
ps->offset = int(((quintptr(ps) + sizeof(PrivateShared) + align - 1) & ~(align - 1)) - quintptr(ps));