Detect incompatibilities in repeated type registration
authorJoão Abecasis <joao.abecasis@nokia.com>
Mon, 30 Jan 2012 13:50:04 +0000 (14:50 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 7 Feb 2012 08:47:51 +0000 (09:47 +0100)
commit5a92dd612472378ec329d380fdc8fe609478b06c
tree3f48a2970f9a0d7f81b09e3c91035a250ee0c05c
parentb8cf1d6bdcaefaa610014a742808af3ab2c6fe06
Detect incompatibilities in repeated type registration

QMetaType used to register a typeName and factory functions for
creation/destruction of objects. While it would be possible for a single
type name to be registered matching different actual types and memory
layouts, there was little that could be done about it.

Now that QMetaType is tracking type information with a direct impact on
data layout and ABI (size and type flags) it is important that we check
and detect binary incompatibilities as early as possible.

[Such incompatibilities could arise from type name re-use (technically,
ODR violations) or, more commonly, as version mismatch between different
shared libraries or plugins.]

Only type size and flags are checked as function pointers to inline and
template or otherwise non-exported functions could trivially differ
across translation units and shared libraries.

When registering typedef types, a check is made to ensure the same name
doesn't get registered as different types.

Change-Id: I8211c3de75d4854ce8fafdb620d3a931c206e0c3
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
src/corelib/kernel/qmetatype.cpp
tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp