loplugin:dllprivate: Extend for new qtbase macro
Qt's qtbase commit [1]
commit cecca90ff23ff27b9396defc21abd472b3fe0003
Author: Thiago Macieira <thiago.macieira@intel.com>
AuthorDate: Tue Oct 1 11:26:30 2024 -0700
Commit: Thiago Macieira <thiago.macieira@intel.com>
CommitDate: Tue Nov 12 17:14:46 2024 -0800
moc: fix support for generating meta objects for nested private classes
introduced a new QT_OBJECT_GADGET_COMMON macro, causing my
`--enable-qt6` clang plugin build with current qtbase git dev
(as of commit 957e2be00a5c45223a5ef842a5f9f2f7b7be882b)
to fail as follows for classes using the Q_OBJECT macro:
In file included from /home/michi/development/git/libreoffice/vcl/qt6/QtAccessibleRegistry.cxx:10:
In file included from /home/michi/development/git/libreoffice/vcl/qt6/../qt5/QtAccessibleRegistry.cxx:11:
In file included from /home/michi/development/git/libreoffice/vcl/inc/qt6/QtXAccessible.hxx:10:
/home/michi/development/git/libreoffice/vcl/inc/qt6/../qt5/QtXAccessible.hxx:27:5: error: declaration nested in DLLPRIVATE declaration redundantly marked as DLLPRIVATE [loplugin:dllprivate]
27 | Q_OBJECT
| ^~~~~~~~
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qtmetamacros.h:145:5: note: expanded from macro 'Q_OBJECT'
145 | QT_OBJECT_GADGET_COMMON \
| ^~~~~~~~~~~~~~~~~~~~~~~
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qtmetamacros.h:132:5: note: expanded from macro 'QT_OBJECT_GADGET_COMMON'
132 | Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qtmetamacros.h:98:39: note: expanded from macro 'Q_DECL_HIDDEN_STATIC_METACALL'
98 | #define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN
| ^
/home/michi/development/git/qt5/qtbase/src/corelib/global/qcompilerdetection.h:190:46: note: expanded from macro 'Q_DECL_HIDDEN'
190 | # define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
| ^
/home/michi/development/git/libreoffice/vcl/inc/qt6/../qt5/QtXAccessible.hxx:25:7: note: parent declaration is here [loplugin:dllprivate]
25 | class QtXAccessible : public QObject
| ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 | {
| ~
27 | Q_OBJECT
| ~~~~~~~~
28 |
29 | public:
| ~~~~~~~
30 | QtXAccessible(css::uno::Reference<css::accessibility::XAccessible> xAccessible);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 |
32 | /** Reference to the XAccessible.
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 | * This is cleared once it has been passed to the QtAccessibleWidget,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 | * which then keeps an own reference and takes care of all required
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 | * access to the XAccessible for the Qt a11y bridge. */
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 | css::uno::Reference<css::accessibility::XAccessible> m_xAccessible;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 | };
| ~
1 error generated.
make[1]: *** [/home/michi/development/git/libreoffice/solenv/gbuild/LinkTarget.mk:339: /home/michi/development/git/libreoffice/workdir/CxxObject/vcl/qt6/QtAccessibleRegistry.o] Error 1
Extend the plugin to also take the new macro into account in
addition to Q_OBJECT.
[1] https://code.qt.io/cgit/qt/qtbase.git/commit/?id=cecca90ff23ff27b9396defc21abd472b3fe0003
Change-Id: I990f0b25010b3a0f0cc3902f732b93d13bb85d78
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176702
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
@@ -27,14 +27,14 @@ public:
|
||||
if (a == nullptr || a->getVisibility() != VisibilityAttr::Hidden) {
|
||||
return true;
|
||||
}
|
||||
if (compiler.getSourceManager().isMacroBodyExpansion(
|
||||
decl->getLocation())
|
||||
&& (Lexer::getImmediateMacroName(
|
||||
decl->getLocation(), compiler.getSourceManager(),
|
||||
compiler.getLangOpts())
|
||||
== "Q_OBJECT")) // from /usr/include/QtCore/qobjectdefs.h
|
||||
if (compiler.getSourceManager().isMacroBodyExpansion(decl->getLocation()))
|
||||
{
|
||||
return true;
|
||||
StringRef macroName = Lexer::getImmediateMacroName(
|
||||
decl->getLocation(), compiler.getSourceManager(),
|
||||
compiler.getLangOpts());
|
||||
// macros from Qt's qtbase module
|
||||
if (macroName == "Q_OBJECT" || macroName == "QT_OBJECT_GADGET_COMMON")
|
||||
return true;
|
||||
}
|
||||
auto p = dyn_cast<RecordDecl>(decl->getDeclContext());
|
||||
if (p == nullptr) {
|
||||
|
||||
Reference in New Issue
Block a user