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:
Michael Weghorn
2024-11-18 10:17:08 +01:00
parent 37e082bd2b
commit 62c7d89c6a
+7 -7
View File
@@ -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) {