diff options
26 files changed, 111 insertions, 144 deletions
diff --git a/chart2/source/inc/CommonFunctors.hxx b/chart2/source/inc/CommonFunctors.hxx index e8cdb12d6ba1..8b11df32f3ea 100644 --- a/chart2/source/inc/CommonFunctors.hxx +++ b/chart2/source/inc/CommonFunctors.hxx @@ -50,7 +50,7 @@ template< typename T > <p>In case no number can be generated from the Any, NaN (see rtl::math::SetNAN()) is returned.</p> */ -struct AnyToDouble +struct OOO_DLLPUBLIC_CHARTTOOLS AnyToDouble { double operator() ( const css::uno::Any & rAny ) { @@ -64,7 +64,7 @@ struct AnyToDouble /** unary function to convert css::uno::Any into an OUString. */ -struct AnyToString +struct OOO_DLLPUBLIC_CHARTTOOLS AnyToString { OUString operator() ( const css::uno::Any & rAny ) { @@ -93,7 +93,7 @@ struct AnyToString <p>For conversion rtl::math::StringToDouble is used.</p> */ -struct OUStringToDouble +struct OOO_DLLPUBLIC_CHARTTOOLS OUStringToDouble { double operator() ( const OUString & rStr ) { @@ -111,7 +111,7 @@ struct OUStringToDouble <p>For conversion rtl::math::DoubleToOUString is used.</p> */ -struct DoubleToOUString +struct OOO_DLLPUBLIC_CHARTTOOLS DoubleToOUString { OUString operator() ( double fNumber ) { diff --git a/chart2/source/inc/PropertyHelper.hxx b/chart2/source/inc/PropertyHelper.hxx index 4051d00f9e78..52a38edfed6c 100644 --- a/chart2/source/inc/PropertyHelper.hxx +++ b/chart2/source/inc/PropertyHelper.hxx @@ -138,7 +138,7 @@ OOO_DLLPUBLIC_CHARTTOOLS void setEmptyPropertyValueDefault( tPropertyValueMap & } // namespace PropertyHelper -struct PropertyNameLess +struct OOO_DLLPUBLIC_CHARTTOOLS PropertyNameLess { bool operator() ( const css::beans::Property & first, const css::beans::Property & second ) diff --git a/compilerplugins/clang/dllmacro.cxx b/compilerplugins/clang/dllmacro.cxx deleted file mode 100644 index 66664888419c..000000000000 --- a/compilerplugins/clang/dllmacro.cxx +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include "plugin.hxx" -#include <iostream> -#include <fstream> - -/** - Check the usage of the various DLL visibility macros. - */ -class DllMacro final: - public RecursiveASTVisitor<DllMacro>, public loplugin::Plugin -{ -public: - explicit DllMacro(InstantiationData const & data): Plugin(data) {} - - bool VisitNamedDecl(NamedDecl const * decl); - -private: - void run() override { - // DISABLE_DYNLOADING makes SAL_DLLPUBLIC_{EXPORT,IMPORT,TEMPLATE} expand - // to visibility("hidden") attributes, which would cause bogus warnings - // here (e.g., in UBSan builds that explicitly define DISABLE_DYNLOADING - // in jurt/source/pipe/staticsalhack.cxx); alternatively, change - // include/sal/types.h to make those SAL_DLLPUBLIC_* expand to nothing - // for DISABLE_DYNLOADING: - if (!compiler.getPreprocessor().getIdentifierInfo("DISABLE_DYNLOADING") - ->hasMacroDefinition()) - { - TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); - } - } -}; - -bool DllMacro::VisitNamedDecl(NamedDecl const * decl) { - if (!decl->getLocation().isInvalid() && ignoreLocation(decl)) { - return true; - } - auto a = decl->getAttr<VisibilityAttr>(); - if (a == nullptr) { - return true; - } - if (compiler.getSourceManager().isMacroBodyExpansion( - decl->getLocation()) - && (Lexer::getImmediateMacroName( - decl->getLocation(), compiler.getSourceManager(), - compiler.getLangOpts()) - == "Q_OBJECT")) // from /usr/include/QtCore/qobjectdefs.h - { - return true; - } - if (a->getVisibility() == VisibilityAttr::Hidden) { - auto p = dyn_cast<RecordDecl>(decl->getDeclContext()); - if (p == nullptr) { - report( - DiagnosticsEngine::Warning, - "top-level declaration redundantly marked as DLLPRIVATE", - a->getLocation()) - << decl->getSourceRange(); - } else if (p->getVisibility() == HiddenVisibility) { - report( - DiagnosticsEngine::Warning, - ("declaration nested in DLLPRIVATE declaration redundantly" - " marked as DLLPRIVATE"), - a->getLocation()) - << decl->getSourceRange(); - report( - DiagnosticsEngine::Note, "parent declaration is here", - p->getLocation()) - << p->getSourceRange(); - } - } - else if (a->getVisibility() == VisibilityAttr::Default && !a->isInherited()) - { - auto p = dyn_cast<CXXRecordDecl>(decl); - if (p && p->isCompleteDefinition() && !p->getDescribedClassTemplate()) { - // don't know what these macros mean, leave them alone - auto macroLoc = a->getLocation(); - while (compiler.getSourceManager().isMacroBodyExpansion(macroLoc)) { - auto macroName = Lexer::getImmediateMacroName( - macroLoc, compiler.getSourceManager(), - compiler.getLangOpts()); - if (macroName == "SAL_EXCEPTION_DLLPUBLIC_EXPORT") - return true; - if (macroName == "VCL_PLUGIN_PUBLIC") - return true; - macroLoc = compiler.getSourceManager().getImmediateMacroCallerLoc(macroLoc); - } - for (auto it = p->method_begin(); it != p->method_end(); ++it) { - if (!it->hasInlineBody()) { - return true; - } - } - report( - DiagnosticsEngine::Warning, - "unnecessary *DLLPUBLIC declaration for class completely defined in header file", - a->getLocation()) - << decl->getSourceRange(); - } - } - return true; -} - -static loplugin::Plugin::Registration<DllMacro> reg("dllmacro"); - -/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/compilerplugins/clang/dllprivate.cxx b/compilerplugins/clang/dllprivate.cxx new file mode 100644 index 000000000000..05cf26d7d5d2 --- /dev/null +++ b/compilerplugins/clang/dllprivate.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "plugin.hxx" + +namespace { + +class Visitor final: + public RecursiveASTVisitor<Visitor>, public loplugin::Plugin +{ +public: + explicit Visitor(InstantiationData const & data): Plugin(data) {} + + bool VisitNamedDecl(NamedDecl const * decl) { + if (!decl->getLocation().isInvalid()&&ignoreLocation(decl)) { + return true; + } + auto a = decl->getAttr<VisibilityAttr>(); + 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 + { + return true; + } + auto p = dyn_cast<RecordDecl>(decl->getDeclContext()); + if (p == nullptr) { + report( + DiagnosticsEngine::Warning, + "top-level declaration redundantly marked as DLLPRIVATE", + a->getLocation()) + << decl->getSourceRange(); + } else if (p->getVisibility() == HiddenVisibility) { + report( + DiagnosticsEngine::Warning, + ("declaration nested in DLLPRIVATE declaration redundantly" + " marked as DLLPRIVATE"), + a->getLocation()) + << decl->getSourceRange(); + report( + DiagnosticsEngine::Note, "parent declaration is here", + p->getLocation()) + << p->getSourceRange(); + } + return true; + } + +private: + void run() override { + // DISABLE_DYNLOADING makes SAL_DLLPUBLIC_{EXPORT,IMPORT,TEMPLATE} expand + // to visibility("hidden") attributes, which would cause bogus warnings + // here (e.g., in UBSan builds that explicitly define DISABLE_DYNLOADING + // in jurt/source/pipe/staticsalhack.cxx); alternatively, change + // include/sal/types.h to make those SAL_DLLPUBLIC_* expand to nothing + // for DISABLE_DYNLOADING: + if (!compiler.getPreprocessor().getIdentifierInfo("DISABLE_DYNLOADING") + ->hasMacroDefinition()) + { + TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); + } + } +}; + +static loplugin::Plugin::Registration<Visitor> reg("dllprivate"); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/inc/RowFunctionParser.hxx b/connectivity/source/inc/RowFunctionParser.hxx index 5c494728a9f5..df2c7ba2bf4e 100644 --- a/connectivity/source/inc/RowFunctionParser.hxx +++ b/connectivity/source/inc/RowFunctionParser.hxx @@ -55,7 +55,7 @@ public: /** This exception is thrown, when the arithmetic expression parser failed to parse a string. */ -struct ParseError +struct OOO_DLLPUBLIC_DBTOOLS ParseError { ParseError( const char* ) {} }; diff --git a/desktop/source/deployment/inc/dp_ucb.h b/desktop/source/deployment/inc/dp_ucb.h index 19b6e1b9702b..3c97fc6a1e89 100644 --- a/desktop/source/deployment/inc/dp_ucb.h +++ b/desktop/source/deployment/inc/dp_ucb.h @@ -36,7 +36,7 @@ class Content; namespace dp_misc { -struct StrTitle +struct DESKTOP_DEPLOYMENTMISC_DLLPUBLIC StrTitle { static css::uno::Sequence< OUString > getTitleSequence() { diff --git a/include/basegfx/color/bcolor.hxx b/include/basegfx/color/bcolor.hxx index c612a5d6dfd8..300f8db81e81 100644 --- a/include/basegfx/color/bcolor.hxx +++ b/include/basegfx/color/bcolor.hxx @@ -42,7 +42,7 @@ namespace basegfx @see B3DTuple */ - class SAL_WARN_UNUSED BColor : public B3DTuple + class SAL_WARN_UNUSED BASEGFX_DLLPUBLIC BColor : public B3DTuple { public: /** Create a Color with red, green and blue components from [0.0 to 1.0] diff --git a/include/basegfx/matrix/b2dhommatrixtools.hxx b/include/basegfx/matrix/b2dhommatrixtools.hxx index f0559fdf8f11..c60a6ac96c21 100644 --- a/include/basegfx/matrix/b2dhommatrixtools.hxx +++ b/include/basegfx/matrix/b2dhommatrixtools.hxx @@ -148,7 +148,7 @@ namespace basegfx { namespace utils { - class B2DHomMatrixBufferedDecompose + class BASEGFX_DLLPUBLIC B2DHomMatrixBufferedDecompose { private: B2DVector maScale; diff --git a/include/basegfx/numeric/ftools.hxx b/include/basegfx/numeric/ftools.hxx index cf7a05316bc7..35a1a35111b2 100644 --- a/include/basegfx/numeric/ftools.hxx +++ b/include/basegfx/numeric/ftools.hxx @@ -148,7 +148,7 @@ namespace basegfx */ BASEGFX_DLLPUBLIC double snapToNearestMultiple(double v, const double fStep); - class fTools + class BASEGFX_DLLPUBLIC fTools { public: /// Get threshold value for equalZero and friends diff --git a/include/basegfx/pixel/bpixel.hxx b/include/basegfx/pixel/bpixel.hxx index 7eee516c2cff..ed1dadc06a09 100644 --- a/include/basegfx/pixel/bpixel.hxx +++ b/include/basegfx/pixel/bpixel.hxx @@ -27,7 +27,7 @@ namespace basegfx { - class BPixel + class BASEGFX_DLLPUBLIC BPixel { protected: union diff --git a/include/comphelper/propertycontainerhelper.hxx b/include/comphelper/propertycontainerhelper.hxx index 23f9757e0336..513aa88f4993 100644 --- a/include/comphelper/propertycontainerhelper.hxx +++ b/include/comphelper/propertycontainerhelper.hxx @@ -32,7 +32,7 @@ namespace comphelper // infos about one single property -struct PropertyDescription +struct COMPHELPER_DLLPUBLIC PropertyDescription { // the possibilities where a property holding object may be located enum class LocationType diff --git a/include/connectivity/FValue.hxx b/include/connectivity/FValue.hxx index 9fa8d09199e6..d2fbfd47e9ba 100644 --- a/include/connectivity/FValue.hxx +++ b/include/connectivity/FValue.hxx @@ -472,7 +472,7 @@ namespace connectivity /// TSetBound is a functor to set the bound value with e.q. for_each call - struct TSetBound + struct OOO_DLLPUBLIC_DBTOOLS TSetBound { bool m_bBound; TSetBound(bool _bBound) : m_bBound(_bBound){} @@ -482,7 +482,7 @@ namespace connectivity /// TSetBound is a functor to set the bound value with e.q. for_each call - struct TSetRefBound + struct OOO_DLLPUBLIC_DBTOOLS TSetRefBound { bool m_bBound; TSetRefBound(bool _bBound) : m_bBound(_bBound){} diff --git a/include/filter/msfilter/dffrecordheader.hxx b/include/filter/msfilter/dffrecordheader.hxx index cddc2e3d2447..acd0d2539889 100644 --- a/include/filter/msfilter/dffrecordheader.hxx +++ b/include/filter/msfilter/dffrecordheader.hxx @@ -26,7 +26,7 @@ #include <tools/solar.h> #include <tools/stream.hxx> -class DffRecordHeader +class MSFILTER_DLLPUBLIC DffRecordHeader { public: sal_uInt8 nRecVer; // may be DFF_PSFLAG_CONTAINER diff --git a/include/filter/msfilter/mscodec.hxx b/include/filter/msfilter/mscodec.hxx index 8a409800407a..b0ab818449ae 100644 --- a/include/filter/msfilter/mscodec.hxx +++ b/include/filter/msfilter/mscodec.hxx @@ -476,13 +476,13 @@ struct MSFILTER_DLLPUBLIC EncryptionVerifierRC4 EncryptionVerifierRC4(); }; -struct StandardEncryptionInfo +struct MSFILTER_DLLPUBLIC StandardEncryptionInfo { EncryptionStandardHeader header; EncryptionVerifierAES verifier; }; -struct RC4EncryptionInfo +struct MSFILTER_DLLPUBLIC RC4EncryptionInfo { EncryptionStandardHeader header; EncryptionVerifierRC4 verifier; diff --git a/include/filter/msfilter/svdfppt.hxx b/include/filter/msfilter/svdfppt.hxx index 2895b98fbf0b..2be1cd00dbb0 100644 --- a/include/filter/msfilter/svdfppt.hxx +++ b/include/filter/msfilter/svdfppt.hxx @@ -117,7 +117,7 @@ struct SdHyperlinkEntry }; // Helper class for reading the PPT InteractiveInfoAtom -struct PptInteractiveInfoAtom +struct MSFILTER_DLLPUBLIC PptInteractiveInfoAtom { sal_uInt32 nSoundRef; sal_uInt32 nExHyperlinkId; diff --git a/include/filter/msfilter/util.hxx b/include/filter/msfilter/util.hxx index 1d3bae385677..8aa01f5be952 100644 --- a/include/filter/msfilter/util.hxx +++ b/include/filter/msfilter/util.hxx @@ -70,7 +70,7 @@ MSFILTER_DLLPUBLIC OString ConvertColor( const Color &rColor, bool bAutoColor = /** Paper size in 1/100 millimeters. */ -struct ApiPaperSize +struct MSFILTER_DLLPUBLIC ApiPaperSize { sal_Int32 mnWidth; sal_Int32 mnHeight; diff --git a/include/svx/transfrmhelper.hxx b/include/svx/transfrmhelper.hxx index 481814b298c5..d5f293dbc10a 100644 --- a/include/svx/transfrmhelper.hxx +++ b/include/svx/transfrmhelper.hxx @@ -24,7 +24,7 @@ #include <tools/fldunit.hxx> #include <tools/mapunit.hxx> -class TransfrmHelper +class SVX_DLLPUBLIC TransfrmHelper { public: static void ConvertRect(basegfx::B2DRange& rRange, const sal_uInt16 nDigits, const MapUnit ePoolUnit, const FieldUnit eDlgUnit) diff --git a/include/svx/xmlexchg.hxx b/include/svx/xmlexchg.hxx index 044422e15406..6d2c0bfc1bae 100644 --- a/include/svx/xmlexchg.hxx +++ b/include/svx/xmlexchg.hxx @@ -42,7 +42,7 @@ namespace svx //= OXFormsDescriptor - struct OXFormsDescriptor { + struct SVX_DLLPUBLIC OXFormsDescriptor { OUString szName; OUString szServiceName; diff --git a/include/tools/svborder.hxx b/include/tools/svborder.hxx index e1fa1b5356b1..9eef88819847 100644 --- a/include/tools/svborder.hxx +++ b/include/tools/svborder.hxx @@ -23,7 +23,7 @@ #include <tools/toolsdllapi.h> #include <tools/gen.hxx> -class SAL_WARN_UNUSED SvBorder +class SAL_WARN_UNUSED TOOLS_DLLPUBLIC SvBorder { long nTop, nRight, nBottom, nLeft; diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx index 904530b3e5f0..0be13c12bf3e 100644 --- a/include/vcl/bitmap.hxx +++ b/include/vcl/bitmap.hxx @@ -110,7 +110,7 @@ enum class BmpFilter Unknown = 65535 }; -class BmpFilterParam +class VCL_DLLPUBLIC BmpFilterParam { public: diff --git a/include/vcl/commandevent.hxx b/include/vcl/commandevent.hxx index 464734fe4f94..778348b3d1a3 100644 --- a/include/vcl/commandevent.hxx +++ b/include/vcl/commandevent.hxx @@ -206,7 +206,7 @@ enum class ShowDialogId About = 2, }; -class CommandDialogData +class VCL_DLLPUBLIC CommandDialogData { ShowDialogId m_nDialogId; public: @@ -242,7 +242,7 @@ enum class MediaCommand NextTrackHold = 21,// Button Right holding pressed. }; -class CommandMediaData +class VCL_DLLPUBLIC CommandMediaData { MediaCommand m_nMediaId; bool m_bPassThroughToOS; @@ -270,7 +270,7 @@ public: sal_uLong GetEnd() const { return mnEnd; } }; -class CommandSwipeData +class VCL_DLLPUBLIC CommandSwipeData { double mnVelocityX; public: @@ -286,7 +286,7 @@ public: }; -class CommandLongPressData +class VCL_DLLPUBLIC CommandLongPressData { double mnX; double mnY; diff --git a/include/vcl/pointr.hxx b/include/vcl/pointr.hxx index 405a5a875e38..8370b9f9d296 100644 --- a/include/vcl/pointr.hxx +++ b/include/vcl/pointr.hxx @@ -23,7 +23,7 @@ #include <vcl/dllapi.h> #include <vcl/ptrstyle.hxx> -class Pointer +class VCL_DLLPUBLIC Pointer { PointerStyle meStyle; diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 2a2004e5673b..0d33f1bb7146 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -91,7 +91,7 @@ enum ScAxisPosition } -struct ScDataBarFormatData +struct SC_DLLPUBLIC ScDataBarFormatData { ScDataBarFormatData(): maAxisColor(COL_BLACK), diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 494ebb85e017..51c716d85a5a 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -129,7 +129,7 @@ inline std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index) // SwRange -class SwNodeRange +class SW_DLLPUBLIC SwNodeRange { public: SwNodeIndex aStart; diff --git a/sw/source/filter/inc/fltshell.hxx b/sw/source/filter/inc/fltshell.hxx index c021f8514c9f..34f1ab8862dc 100644 --- a/sw/source/filter/inc/fltshell.hxx +++ b/sw/source/filter/inc/fltshell.hxx @@ -47,7 +47,7 @@ inline bool SwFltGetFlag(sal_uLong nFieldFlags, int no) //Subvert the Node/Content system to get positions which don't update as //content is appended to them -struct SwFltPosition +struct SW_DLLPUBLIC SwFltPosition { public: SwNodeIndex m_nNode; diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 7130d1153d6b..5879c1bfdf44 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -71,7 +71,7 @@ typedef void (*damageHandler)(void* handle, sal_Int32 nExtentsX, sal_Int32 nExtentsY, sal_Int32 nExtentsWidth, sal_Int32 nExtentsHeight); -struct DamageHandler +struct VCL_DLLPUBLIC DamageHandler { void *handle; damageHandler damaged; |