summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--basic/source/sbx/sbxvar.cxx2
-rw-r--r--compilerplugins/clang/dyncastvisibility.cxx84
-rw-r--r--emfio/inc/mtftools.hxx2
-rw-r--r--emfio/source/reader/mtftools.cxx2
-rw-r--r--include/basic/sbx.hxx1
-rw-r--r--include/sfx2/app.hxx6
-rw-r--r--include/svx/ClassificationField.hxx2
-rw-r--r--include/svx/sxelditm.hxx4
-rw-r--r--sfx2/source/appl/app.cxx2
-rw-r--r--svx/Library_svx.mk1
-rw-r--r--svx/Library_svxcore.mk1
-rw-r--r--svx/source/dialog/ClassificationField.cxx16
-rw-r--r--svx/source/svdraw/sxelditm.cxx16
-rw-r--r--sw/inc/ftninfo.hxx2
-rw-r--r--sw/source/core/doc/docftn.cxx2
15 files changed, 125 insertions, 18 deletions
diff --git a/basic/source/sbx/sbxvar.cxx b/basic/source/sbx/sbxvar.cxx
index 5ae69288af13..97f7c0347ad9 100644
--- a/basic/source/sbx/sbxvar.cxx
+++ b/basic/source/sbx/sbxvar.cxx
@@ -569,6 +569,8 @@ SbxInfo::SbxInfo( OUString a, sal_uInt32 n )
: aHelpFile(std::move( a )), nHelpId( n )
{}
+SbxHint::~SbxHint() = default;
+
void SbxVariable::Dump( SvStream& rStrm, bool bFill )
{
OString aBNameStr(OUStringToOString(GetName( SbxNameType::ShortTypes ), RTL_TEXTENCODING_ASCII_US));
diff --git a/compilerplugins/clang/dyncastvisibility.cxx b/compilerplugins/clang/dyncastvisibility.cxx
index 7d6b19aa6e24..236e57b92671 100644
--- a/compilerplugins/clang/dyncastvisibility.cxx
+++ b/compilerplugins/clang/dyncastvisibility.cxx
@@ -66,7 +66,7 @@ bool isDerivedFrom(
}
derived = true;
}
- }
+ }
return derived;
}
@@ -157,7 +157,14 @@ public:
assert(rds != nullptr);
Bases bs;
bool hidden = false;
- if (!(isDerivedFrom(rdd, rds, &bs, &hidden) && hidden)) {
+ if (!isDerivedFrom(rdd, rds, &bs, &hidden)) {
+ return true;
+ }
+ Decl const * missing = nullptr;
+ if (rdd->isEffectivelyFinal()) {
+ missing = missingKeyFunction(rdd);
+ }
+ if (!hidden && missing == nullptr) {
return true;
}
report(
@@ -167,26 +174,44 @@ public:
expr->getExprLoc())
<< ts << vis(getTypeVisibility(rds)) << td
<< vis(getTypeVisibility(rdd)) << expr->getSourceRange();
- report(
- DiagnosticsEngine::Note,
- "base class %0 with %1 type visibility defined here",
- rds->getLocation())
- << ts << vis(getTypeVisibility(rds)) << rds->getSourceRange();
- for (auto const i: bs) {
- if (getTypeVisibility(i) != DefaultVisibility) {
+ if (hidden) {
+ report(
+ DiagnosticsEngine::Note,
+ "base class %0 with %1 type visibility defined here",
+ rds->getLocation())
+ << ts << vis(getTypeVisibility(rds)) << rds->getSourceRange();
+ for (auto const i: bs) {
+ if (getTypeVisibility(i) != DefaultVisibility) {
+ report(
+ DiagnosticsEngine::Note,
+ ("intermediary class %0 with %1 type visibility defined"
+ " here"),
+ i->getLocation())
+ << i << vis(getTypeVisibility(i)) << i->getSourceRange();
+ }
+ }
+ report(
+ DiagnosticsEngine::Note,
+ "derived class %0 with %1 type visibility defined here",
+ rdd->getLocation())
+ << td << vis(getTypeVisibility(rdd)) << rdd->getSourceRange();
+ }
+ if (missing != nullptr) {
+ if (isa<CXXRecordDecl>(missing)) {
report(
DiagnosticsEngine::Note,
- ("intermediary class %0 with %1 type visibility defined"
- " here"),
- i->getLocation())
- << i << vis(getTypeVisibility(i)) << i->getSourceRange();
+ "derived class %0 does not have a key function (at least on some platforms)",
+ missing->getLocation())
+ << td << missing->getSourceRange();
+ } else {
+ report(
+ DiagnosticsEngine::Note,
+ "derived class %0 has a key function (at least on some platforms) that is"
+ " inline",
+ missing->getLocation())
+ << td << missing->getSourceRange();
}
}
- report(
- DiagnosticsEngine::Note,
- "derived class %0 with %1 type visibility defined here",
- rdd->getLocation())
- << td << vis(getTypeVisibility(rdd)) << rdd->getSourceRange();
return true;
}
@@ -199,6 +224,29 @@ private:
TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
}
}
+
+ Decl const * missingKeyFunction(CXXRecordDecl const * decl) {
+ auto const md = compiler.getASTContext().getCurrentKeyFunction(decl);
+ if (md != nullptr && !md->isInlined()) {
+ return nullptr;
+ }
+ // Ignore classes defined in the main file:
+ auto const def = decl->getDefinition();
+ assert(def != nullptr);
+ if (compiler.getSourceManager().isInMainFile(def->getLocation())) {
+ return nullptr;
+ }
+ //TODO: Ignore template instantiations, for which any key function would necessarily be
+ // inline, unless there is an explicit extern template instantiation (as there should
+ // arguably be for such cases, cf. comphelper::DocumentEventHolder in
+ // include/comphelper/asyncnotification.hxx, but which might be complicated to check here):
+ auto const tsk = decl->getTemplateSpecializationKind();
+ if (tsk == TSK_ImplicitInstantiation || tsk == TSK_ExplicitInstantiationDeclaration) {
+ return nullptr;
+ }
+ return md == nullptr ? static_cast<Decl const *>(decl) : static_cast<Decl const *>(md);
+ }
+
};
static loplugin::Plugin::Registration<DynCastVisibility> dyncastvisibility(
diff --git a/emfio/inc/mtftools.hxx b/emfio/inc/mtftools.hxx
index f5638af59ecb..f99abab2f1d1 100644
--- a/emfio/inc/mtftools.hxx
+++ b/emfio/inc/mtftools.hxx
@@ -392,6 +392,8 @@ namespace emfio
vcl::Font aFont;
explicit WinMtfFontStyle(LOGFONTW const & rLogFont);
+
+ ~WinMtfFontStyle() override;
};
enum class WinMtfFillStyleType
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 7ce4cd0fd559..6d920a2ce5a4 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -308,6 +308,8 @@ namespace emfio
#endif
};
+ WinMtfFontStyle::~WinMtfFontStyle() = default;
+
// tdf#127471
ScaledFontDetectCorrectHelper::ScaledFontDetectCorrectHelper()
{
diff --git a/include/basic/sbx.hxx b/include/basic/sbx.hxx
index dc4fdb7934e3..26cd2654b345 100644
--- a/include/basic/sbx.hxx
+++ b/include/basic/sbx.hxx
@@ -82,6 +82,7 @@ class BASIC_DLLPUBLIC SbxHint final : public SfxHint
SbxVariable* pVar;
public:
SbxHint( SfxHintId n, SbxVariable* v ) : SfxHint( n ), pVar( v ) {}
+ ~SbxHint() override;
SbxVariable* GetVar() const { return pVar; }
};
diff --git a/include/sfx2/app.hxx b/include/sfx2/app.hxx
index 312a2c9dbc34..d8c1ca989496 100644
--- a/include/sfx2/app.hxx
+++ b/include/sfx2/app.hxx
@@ -78,11 +78,17 @@ enum class SfxToolsModule
class SFX2_DLLPUBLIC SfxLinkItem final : public SfxPoolItem
{
Link<SfxPoolItem const *, void> aLink;
+
+ SfxLinkItem(SfxLinkItem const &) = default;
+ void operator =(SfxLinkItem const &) = delete;
+
public:
SfxLinkItem( sal_uInt16 nWhichId, const Link<SfxPoolItem const *, void>& rValue )
: SfxPoolItem( nWhichId, SfxItemType::SfxLinkItemType )
{ aLink = rValue; }
+ virtual ~SfxLinkItem() override;
+
virtual SfxLinkItem* Clone( SfxItemPool* = nullptr ) const override
{ return new SfxLinkItem( *this ); }
virtual bool operator==( const SfxPoolItem& rL) const override
diff --git a/include/svx/ClassificationField.hxx b/include/svx/ClassificationField.hxx
index 4e2633d0392b..a7402bf82883 100644
--- a/include/svx/ClassificationField.hxx
+++ b/include/svx/ClassificationField.hxx
@@ -74,6 +74,8 @@ public:
, msIdentifier(std::move(sIdentifier))
{}
+ ~ClassificationField() override;
+
std::unique_ptr<SvxFieldData> Clone() const override
{
return std::make_unique<ClassificationField>(meType, msDescription, msFullClassName, msIdentifier);
diff --git a/include/svx/sxelditm.hxx b/include/svx/sxelditm.hxx
index 1b3a8b52f59c..bd8d4fca2353 100644
--- a/include/svx/sxelditm.hxx
+++ b/include/svx/sxelditm.hxx
@@ -24,12 +24,16 @@
class SAL_DLLPUBLIC_RTTI SdrEdgeLineDeltaCountItem final : public SfxUInt16Item
{
+ SdrEdgeLineDeltaCountItem(SdrEdgeLineDeltaCountItem const&) = default;
+ void operator=(SdrEdgeLineDeltaCountItem const&) = delete;
+
public:
SdrEdgeLineDeltaCountItem(sal_uInt16 nVal = 0)
: SfxUInt16Item(SDRATTR_EDGELINEDELTACOUNT, nVal,
SfxItemType::SdrEdgeLineDeltaCountItemType)
{
}
+ virtual ~SdrEdgeLineDeltaCountItem() override;
virtual SdrEdgeLineDeltaCountItem* Clone(SfxItemPool*) const override
{
return new SdrEdgeLineDeltaCountItem(*this);
diff --git a/sfx2/source/appl/app.cxx b/sfx2/source/appl/app.cxx
index 3000c06e4dd0..b2a932c16e67 100644
--- a/sfx2/source/appl/app.cxx
+++ b/sfx2/source/appl/app.cxx
@@ -60,6 +60,8 @@
using namespace ::com::sun::star;
+SfxLinkItem::~SfxLinkItem() = default;
+
static SfxApplication* g_pSfxApplication = nullptr;
#if HAVE_FEATURE_XMLHELP
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 0160bc2a4a6d..cddde28842eb 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -140,6 +140,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
svx/source/dialog/ClassificationCommon \
svx/source/dialog/ClassificationDialog \
svx/source/dialog/ClassificationEditView \
+ svx/source/dialog/ClassificationField \
svx/source/dialog/databaseregistrationui \
svx/source/dialog/dialcontrol \
svx/source/dialog/dlgctl3d \
diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk
index 7fe222959676..496b6ccd17d7 100644
--- a/svx/Library_svxcore.mk
+++ b/svx/Library_svxcore.mk
@@ -406,6 +406,7 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\
svx/source/svdraw/svdview \
svx/source/svdraw/svdviter \
svx/source/svdraw/svdxcgv \
+ svx/source/svdraw/sxelditm \
svx/source/svdraw/textchain \
svx/source/svdraw/textchainflow \
svx/source/svdraw/textchaincursor \
diff --git a/svx/source/dialog/ClassificationField.cxx b/svx/source/dialog/ClassificationField.cxx
new file mode 100644
index 000000000000..f96bf9c55de8
--- /dev/null
+++ b/svx/source/dialog/ClassificationField.cxx
@@ -0,0 +1,16 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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 <sal/config.h>
+
+#include <svx/ClassificationField.hxx>
+
+svx::ClassificationField::~ClassificationField() = default;
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/svx/source/svdraw/sxelditm.cxx b/svx/source/svdraw/sxelditm.cxx
new file mode 100644
index 000000000000..f6521c70f5a7
--- /dev/null
+++ b/svx/source/svdraw/sxelditm.cxx
@@ -0,0 +1,16 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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 <sal/config.h>
+
+#include <svx/sxelditm.hxx>
+
+SdrEdgeLineDeltaCountItem::~SdrEdgeLineDeltaCountItem() = default;
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sw/inc/ftninfo.hxx b/sw/inc/ftninfo.hxx
index c5490ed885d0..b7fd5c62998f 100644
--- a/sw/inc/ftninfo.hxx
+++ b/sw/inc/ftninfo.hxx
@@ -108,6 +108,8 @@ public:
SwFootnoteInfo();
SwFootnoteInfo(const SwFootnoteInfo&);
+
+ ~SwFootnoteInfo() override;
};
#endif
diff --git a/sw/source/core/doc/docftn.cxx b/sw/source/core/doc/docftn.cxx
index 28ef3c47bcab..fc820daa6248 100644
--- a/sw/source/core/doc/docftn.cxx
+++ b/sw/source/core/doc/docftn.cxx
@@ -311,6 +311,8 @@ SwFootnoteInfo::SwFootnoteInfo() :
m_bEndNote = false;
}
+SwFootnoteInfo::~SwFootnoteInfo() = default;
+
void SwDoc::SetFootnoteInfo(const SwFootnoteInfo& rInfo)
{
SwRootFrame* pTmpRoot = getIDocumentLayoutAccess().GetCurrentLayout();