summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-12-04 14:20:26 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-12-05 07:32:46 +0100
commit9a06b99d2f53bd8d0a9ab0936efed9924a2abb88 (patch)
tree544f3e51a3978bd234a1c9fcdbf12d9b84352da4 /compilerplugins
parenteaf89e477af94bd3977aca17d72dd442c7604e63 (diff)
loplugin:salcall fix non-virtual methods
first, since those are safer to change than virtual methods Change-Id: Ie3b624019d75ee2b793cee33b3c5f64e994e8bfe Reviewed-on: https://gerrit.libreoffice.org/45798 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/salcall.cxx31
-rw-r--r--compilerplugins/clang/test/salcall.cxx12
2 files changed, 17 insertions, 26 deletions
diff --git a/compilerplugins/clang/salcall.cxx b/compilerplugins/clang/salcall.cxx
index 2c34f8281b96..071e3a87841a 100644
--- a/compilerplugins/clang/salcall.cxx
+++ b/compilerplugins/clang/salcall.cxx
@@ -202,13 +202,13 @@ bool SalCall::VisitFunctionDecl(FunctionDecl const* decl)
}
}
- if (!bDeclIsSalCall)
+ if (!bCanonicalDeclIsSalCall)
return true;
// @TODO For now, I am ignore free functions, since those are most likely to have their address taken.
- // I'll do these later. They are harder to verify since MSVC does not verify when assigning to function pointers
+ // I'll do them later. They are harder to verify since MSVC does not verify when assigning to function pointers
// that the calling convention of the function matches the calling convention of the function pointer!
- if (!methodDecl || methodDecl->isStatic())
+ if (!methodDecl || methodDecl->isStatic() || methodDecl->isVirtual())
return true;
// can only check when we have a definition since this is the most likely time
@@ -234,21 +234,6 @@ bool SalCall::VisitFunctionDecl(FunctionDecl const* decl)
return true;
}
- // some base classes are overridden by sub-classes which override both the base-class and an UNO class
- if (recordDecl)
- {
- if (loplugin::DeclCheck(recordDecl)
- .Class("OProxyAggregation")
- .Namespace("comphelper")
- .GlobalNamespace()
- || loplugin::DeclCheck(recordDecl)
- .Class("OComponentProxyAggregationHelper")
- .Namespace("comphelper")
- .GlobalNamespace()
- || loplugin::DeclCheck(recordDecl).Class("SvxShapeMaster").GlobalNamespace())
- return true;
- }
-
if (methodDecl)
{
for (auto iter = methodDecl->begin_overridden_methods();
@@ -260,7 +245,6 @@ bool SalCall::VisitFunctionDecl(FunctionDecl const* decl)
}
}
- /*
bool bOK = rewrite(rewriteLoc);
if (bOK && canonicalDecl != decl)
{
@@ -269,13 +253,12 @@ bool SalCall::VisitFunctionDecl(FunctionDecl const* decl)
if (bOK)
return true;
- //std::cout << "xxx:" << std::string(p1, leftBracket - p1) << std::endl;
report(DiagnosticsEngine::Warning, "SAL_CALL unnecessary here", rewriteLoc)
<< decl->getSourceRange();
if (canonicalDecl != decl)
report(DiagnosticsEngine::Warning, "SAL_CALL unnecessary here", rewriteCanonicalLoc)
<< canonicalDecl->getSourceRange();
-*/
+
return true;
}
@@ -333,8 +316,12 @@ bool SalCall::rewrite(SourceLocation locBegin)
{
if (!rewriter)
return false;
+ if (!locBegin.isValid())
+ return false;
auto locEnd = locBegin.getLocWithOffset(8);
+ if (!locEnd.isValid())
+ return false;
SourceRange range(locBegin, locEnd);
@@ -368,7 +355,7 @@ bool SalCall::checkOverlap(SourceRange range)
}
#endif
-static loplugin::Plugin::Registration<SalCall> reg("salcall", true);
+static loplugin::Plugin::Registration<SalCall> reg("salcall", false);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/compilerplugins/clang/test/salcall.cxx b/compilerplugins/clang/test/salcall.cxx
index 3b05530e8097..92172ab9e3df 100644
--- a/compilerplugins/clang/test/salcall.cxx
+++ b/compilerplugins/clang/test/salcall.cxx
@@ -11,10 +11,11 @@
class Class1
{
- void SAL_CALL method1(); // xxexpected-error {{SAL_CALL unnecessary here [loplugin:salcall]}}
+ void SAL_CALL method1(); // expected-error {{SAL_CALL unnecessary here [loplugin:salcall]}}
};
-void SAL_CALL Class1::method1() {
-} // xxexpected-error {{SAL_CALL unnecessary here [loplugin:salcall]}}
+void SAL_CALL Class1::method1()
+{ // expected-error@-1 {{SAL_CALL unnecessary here [loplugin:salcall]}}
+}
class Class2
{
@@ -22,12 +23,15 @@ class Class2
};
void SAL_CALL Class2::method1() {} // expected-note {{SAL_CALL inconsistency [loplugin:salcall]}}
+// comment this out because it seems to generate a warning in some internal buffer of clang that I can't annotate
+#if 0
// no warning, this appears to be legal
class Class3
{
- void SAL_CALL method1();
+ void SAL_CALL method1(); // expected-error {{SAL_CALL unnecessary here [loplugin:salcall]}}
};
void Class3::method1() {}
+#endif
// no warning, normal case for reference
class Class4