Fix warnings about uninitialized variables
qtbase/src/corelib/kernel/qmetatype.cpp: In static member function ‘static void QMetaType::destroy(int, void*)’:
qtbase/src/corelib/kernel/qmetatype.cpp:2599:27: error: ‘info.QMetaType::m_destructor’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
if (m_typedDestructor && !m_destructor)
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
qtbase/src/corelib/kernel/qmetatype.cpp:1868:15: note: ‘info.QMetaType::m_destructor’ was declared here
QMetaType info(type);
^~~~
qtbase/src/corelib/kernel/qmetatype.cpp:2600:26: error: ‘info.QMetaType::m_typedDestructor’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
m_typedDestructor(m_typeId, data);
~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
qtbase/src/corelib/kernel/qmetatype.cpp:1868:15: note: ‘info.QMetaType::m_typedDestructor’ was declared here
QMetaType info(type);
^~~~
The extended (not inlined) function may be called on a half
initialized invalid instance.
Change-Id: I26d677a8ad2bd0c5846233f06393e774d377936d
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
parent
45e4dfb449
commit
ecdccce8e4
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue