[Libreoffice-commits] core.git: compilerplugins/clang
Stephan Bergmann (via logerrit)
logerrit at kemper.freedesktop.org
Sun Nov 29 16:45:24 UTC 2020
compilerplugins/clang/toolslong.cxx | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
New commits:
commit e0abb6aa78a763d591834fdc7306fcabe6710121
Author: Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Fri Nov 27 13:50:25 2020 +0100
Commit: Stephan Bergmann <sbergman at redhat.com>
CommitDate: Sun Nov 29 17:44:45 2020 +0100
loplugin:toolslong: Don't warn about virtual functions at all
Now that all the relevant changes in old code should already have been done
anyway, excluding virtual functions nicely avoids clang-cl warnings about the
use of long and unsigned long in Windows-only StreamInterface
(shell/inc/types.hxx). It is implemented by BufferStream and FileStream
(both shell/inc/stream_helper.hxx), of which BufferStream internally uses
[U]LARGE_INTEGER-based IStream and FileStream internally uses long (fseek,
ftell) resp. size_t (fread) based FILE, so basing the common interface on
[unsigned] long doesn't look like too unreasonable a choice.
Change-Id: I563d59a8ca8a0ee37f46e2676ae8d00f6ea24597
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106768
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
Tested-by: Jenkins
diff --git a/compilerplugins/clang/toolslong.cxx b/compilerplugins/clang/toolslong.cxx
index 5a3932e90dbd..fd3f2e2bd932 100644
--- a/compilerplugins/clang/toolslong.cxx
+++ b/compilerplugins/clang/toolslong.cxx
@@ -479,13 +479,18 @@ bool ToolsLong::VisitParmVarDecl(ParmVarDecl const* decl)
auto canonicalF = f->getCanonicalDecl();
if (canonicalF->isDeletedAsWritten() && isa<CXXConversionDecl>(canonicalF))
return true;
+ if (auto const d = dyn_cast<CXXMethodDecl>(canonicalF))
+ {
+ if (d->isVirtual())
+ {
+ return true;
+ }
+ }
// Only rewrite declarations in include files if a definition is
// also seen, to avoid compilation of a definition (in a main file
// only processed later) to fail with a "mismatch" error before the
- // rewriter had a chance to act upon the definition (but use the
- // heuristic of assuming pure virtual functions do not have
- // definitions):
- bool ok = canonicalF->isDefined() || canonicalF->isPure()
+ // rewriter had a chance to act upon the definition:
+ bool ok = canonicalF->isDefined()
|| compiler.getSourceManager().isInMainFile(
compiler.getSourceManager().getSpellingLoc(f->getNameInfo().getLoc()));
if (!ok)
@@ -544,7 +549,14 @@ bool ToolsLong::VisitFunctionDecl(FunctionDecl const* decl)
return true;
if (decl->isDeletedAsWritten() && isa<CXXConversionDecl>(decl))
return true;
- if (decl->isPure() || decl->isDefined()
+ if (auto const d = dyn_cast<CXXMethodDecl>(decl))
+ {
+ if (d->isVirtual())
+ {
+ return true;
+ }
+ }
+ if (decl->isDefined()
|| compiler.getSourceManager().isInMainFile(
compiler.getSourceManager().getSpellingLoc(decl->getNameInfo().getLoc())))
{
More information about the Libreoffice-commits
mailing list