diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-07-01 15:21:39 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-07-06 13:20:10 +0000 |
commit | 24106d1e1c818b358f919ce5cbff219b5a9f8b6a (patch) | |
tree | e726b6a9b1740eb4de76a8080019facd50c3d97a /examples/datavisualization | |
parent | a9bf8ce4d074cce5f6924193d9f514d8dc903a6f (diff) |
Fix layering violation involving AbstractDeclarative
When trying an ubsan build of qtdatavis3d, I get:
abstract3dcontroller.cpp.o: undefined reference to `typeinfo for AbstractDeclarative'
Turns out that AbstractDeclarative is defined in DataVisualizationQml,
a separate library, which depends on DataVisualization.
It seems this worked because Abstract3DController only used inline
members of AbstractDeclarative, so a normal build doesn't need the
class exported, even though it's curious that inline isReady() calls
exported QQuickItem::isComponentLoaded() and the linker didn't
complain.
But an UBSan build requires the type_info, which isn't available,
because the class wasn't exported, and cannot be made available
because of the layering violation.
To fix, Extract Superclass AbstractDeclarativeInterface that provides
only the required isReady() function, but lives in DataVisualization,
and have the real AbstractDeclarative inherit it.
As a drive-by, make isReady() const.
Pick-to: 6.4 6.3 6.2
Fixes: QTBUG-104714
Change-Id: I0eb718746355f409a4105e2d53e79b7003fd8b22
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'examples/datavisualization')
0 files changed, 0 insertions, 0 deletions