diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index eb67544f21..632b86959d 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -2566,6 +2566,8 @@ void *QMetaType::createExtended(const void *copy) const
 */
 void QMetaType::destroyExtended(void *data) const
 {
+    if (m_typeId == QMetaType::UnknownType)
+        return;
     if (Q_UNLIKELY(m_typedDestructor && !m_destructor))
         m_typedDestructor(m_typeId, data);
     else
@@ -2582,6 +2584,8 @@ void QMetaType::destroyExtended(void *data) const
 */
 void *QMetaType::constructExtended(void *where, const void *copy) const
 {
+    if (m_typeId == QMetaType::UnknownType)
+        return nullptr;
     if (m_typedConstructor && !m_constructor)
         return m_typedConstructor(m_typeId, where, copy);
     return nullptr;
@@ -2596,6 +2600,8 @@ void *QMetaType::constructExtended(void *where, const void *copy) const
 */
 void QMetaType::destructExtended(void *data) const
 {
+    if (m_typeId == QMetaType::UnknownType)
+        return;
     if (m_typedDestructor && !m_destructor)
         m_typedDestructor(m_typeId, data);
 }
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index 5d9b5ca95c..e6fac74ccc 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -123,6 +123,7 @@ private slots:
     void compareCustomType();
     void compareCustomEqualOnlyType();
     void customDebugStream();
+    void unknownType();
 };
 
 struct BaseGenericType
@@ -2529,6 +2530,16 @@ void tst_QMetaType::customDebugStream()
     qDebug() << v1;
 }
 
+void tst_QMetaType::unknownType()
+{
+    QMetaType invalid(QMetaType::UnknownType);
+    QVERIFY(!invalid.create());
+    QVERIFY(!invalid.sizeOf());
+    QVERIFY(!invalid.metaObject());
+    int buffer = 0xBAD;
+    invalid.construct(&buffer);
+    QCOMPARE(buffer, 0xBAD);
+}
 // Compile-time test, it should be possible to register function pointer types
 class Undefined;