[Libreoffice-commits] core.git: compilerplugins/clang

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Thu Dec 5 13:41:30 UTC 2019


 compilerplugins/clang/external.cxx |   31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

New commits:
commit c9a6d4bee737c3c39fc61d265dba0460b09c906f
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Thu Dec 5 09:51:05 2019 +0100
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Thu Dec 5 14:40:14 2019 +0100

    loplugin:external: Check for DLLExportAttr also in VisitTagDecl
    
    ...to fix false clang-cl warnings like
    
    > C:/lo-clang/core/cppuhelper/source/compat.cxx(113,29): error: externally available entity 'ClassData' is not previously declared in an included file (if it is only used in this translation unit, put it in an unnamed namespace; otherwise, provide a declaration of it in an included file) [loplugin:external]
    > struct SAL_DLLPUBLIC_EXPORT ClassData {
    > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
    
    Change-Id: Iacf96569e27772aa9e27221619516b1fb84dd665
    Reviewed-on: https://gerrit.libreoffice.org/84514
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/compilerplugins/clang/external.cxx b/compilerplugins/clang/external.cxx
index b31f620cf5ef..6ec2cfdb1c8d 100644
--- a/compilerplugins/clang/external.cxx
+++ b/compilerplugins/clang/external.cxx
@@ -121,6 +121,15 @@ bool mentions(QualType type1, QualType type2)
     return false;
 }
 
+bool hasSalDllpublicExportAttr(Decl const* decl)
+{
+    if (auto const attr = decl->getAttr<VisibilityAttr>())
+    {
+        return attr->getVisibility() == VisibilityAttr::Default;
+    }
+    return decl->hasAttr<DLLExportAttr>();
+}
+
 class External : public loplugin::FilteringPlugin<External>
 {
 public:
@@ -155,15 +164,12 @@ public:
             {
                 return true;
             }
-            if (auto const attr = d->getAttr<VisibilityAttr>())
+            if (hasSalDllpublicExportAttr(d))
             {
-                if (attr->getVisibility() == VisibilityAttr::Default)
-                {
-                    // If the class definition has explicit default visibility, then assume that it
-                    // needs to be present (e.g., a backwards-compatibility stub like in
-                    // cppuhelper/source/compat.cxx):
-                    return true;
-                }
+                // If the class definition has explicit default visibility, then assume that it
+                // needs to be present (e.g., a backwards-compatibility stub like in
+                // cppuhelper/source/compat.cxx):
+                return true;
             }
             if (derivesFromTestFixture(d))
             {
@@ -202,14 +208,7 @@ public:
         // If the function definition is explicit marked SAL_DLLPUBLIC_EXPORT or similar, then
         // assume that it needs to be present (e.g., only called via dlopen, or a backwards-
         // compatibility stub like in sal/osl/all/compat.cxx):
-        if (auto const attr = decl->getAttr<VisibilityAttr>())
-        {
-            if (attr->getVisibility() == VisibilityAttr::Default)
-            {
-                return true;
-            }
-        }
-        else if (decl->hasAttr<DLLExportAttr>())
+        if (hasSalDllpublicExportAttr(decl))
         {
             return true;
         }


More information about the Libreoffice-commits mailing list