Unbreak ubsan developer-build

Clang 3.8's undefined-behavior sanitizer checks that the
declared type of the object is a base class of the
dynamic type of the object on each access to a member
of a class type.

It therefore requires the typeinfo for these types,
which for polymorphic types is emitted in the TU where
the vtable is emitted, too.

QDBusConnectionPrivate is a polymorphic non-exported class,
so this failed at link-time. Ditto for the other case.

Fix by autotest-exporting the classes.

Also, where applicable, de-inline the dtors, so the
vtable (and typeinfo) are pinned to one TU, and the
ctor, just because it's the correct thing to do.

Change-Id: I991f81f88d2a48e85d94d9f3ac61473c0b7056d3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2016-01-06 10:01:07 +01:00
parent 2982d327f7
commit dbc3d8e15e
3 changed files with 9 additions and 2 deletions

View File

@ -107,7 +107,7 @@ public:
// QDBusConnectionPrivate holds the DBusConnection and
// can have many QDBusConnection objects referring to it
class QDBusConnectionPrivate: public QObject
class Q_AUTOTEST_EXPORT QDBusConnectionPrivate: public QObject
{
Q_OBJECT
public:

View File

@ -55,6 +55,11 @@ QT_BEGIN_NAMESPACE
typedef QSqlTableModelSql Sql;
QSqlTableModelPrivate::~QSqlTableModelPrivate()
{
}
/*! \internal
Populates our record with values.
*/

View File

@ -58,7 +58,7 @@
QT_BEGIN_NAMESPACE
class QSqlTableModelPrivate: public QSqlQueryModelPrivate
class Q_AUTOTEST_EXPORT QSqlTableModelPrivate: public QSqlQueryModelPrivate
{
Q_DECLARE_PUBLIC(QSqlTableModel)
@ -69,6 +69,8 @@ public:
strategy(QSqlTableModel::OnRowChange),
busyInsertingRows(false)
{}
~QSqlTableModelPrivate();
void clear();
virtual void clearCache();
QSqlRecord record(const QVector<QVariant> &values) const;