compilerplugins/clang/dllprivate.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
New commits: commit 62c7d89c6a968f162f0ae53288574d0f3a685369 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Nov 18 08:37:34 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon Nov 18 10:17:08 2024 +0100 loplugin:dllprivate: Extend for new qtbase macro Qt's qtbase commit [1] commit cecca90ff23ff27b9396defc21abd472b3fe0003 Author: Thiago Macieira <thiago.macie...@intel.com> AuthorDate: Tue Oct 1 11:26:30 2024 -0700 Commit: Thiago Macieira <thiago.macie...@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.wegh...@posteo.de> diff --git a/compilerplugins/clang/dllprivate.cxx b/compilerplugins/clang/dllprivate.cxx index 5fbace1010b7..b041bb6cc820 100644 --- a/compilerplugins/clang/dllprivate.cxx +++ b/compilerplugins/clang/dllprivate.cxx @@ -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) {