summaryrefslogtreecommitdiffstats
path: root/compilerplugins
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-10-17 15:14:02 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-10-17 18:16:28 +0200
commit3ebbb150242cf049a9ddab7f498c63f3a44aa034 (patch)
tree3bdf235f490b173919369e7062570322effa795d /compilerplugins
parentrename TextEncodingBox back to SvxTextEncodingBox (diff)
downloadcore-3ebbb150242cf049a9ddab7f498c63f3a44aa034.tar.gz
core-3ebbb150242cf049a9ddab7f498c63f3a44aa034.zip
loplugin:buffereadd find stuff involving adding *StringBuffer
and create conversion methods on *StringBuffer to make this work Change-Id: I3cf5ee3e139826168894b46eff8ee4bcde00cb7e Reviewed-on: https://gerrit.libreoffice.org/80949 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/bufferadd.cxx21
-rw-r--r--compilerplugins/clang/test/bufferadd.cxx18
2 files changed, 19 insertions, 20 deletions
diff --git a/compilerplugins/clang/bufferadd.cxx b/compilerplugins/clang/bufferadd.cxx
index 659b110403e3..4346e9ca28b2 100644
--- a/compilerplugins/clang/bufferadd.cxx
+++ b/compilerplugins/clang/bufferadd.cxx
@@ -175,19 +175,6 @@ void BufferAdd::findBufferAssignOrAdd(const Stmt* parentStmt, Stmt const* stmt)
auto cxxConstructExpr = dyn_cast<CXXConstructExpr>(ignore(varDeclLHS->getInit()));
if (cxxConstructExpr)
{
- if (cxxConstructExpr->getNumArgs() == 0)
- {
- addToGoodMap(varDeclLHS, parentStmt);
- return;
- }
- auto tc2 = loplugin::TypeCheck(cxxConstructExpr->getArg(0)->getType());
- if (tc2.LvalueReference().Class("OUStringBuffer")
- || tc2.LvalueReference().Class("OStringBuffer")
- || tc2.Class("OUStringBuffer") || tc2.Class("OStringBuffer"))
- {
- badMap.insert(varDeclLHS);
- return;
- }
addToGoodMap(varDeclLHS, parentStmt);
return;
}
@@ -286,10 +273,6 @@ bool BufferAdd::isMethodOkToMerge(CXXMemberCallExpr const* memberCall)
auto methodDecl = memberCall->getMethodDecl();
if (methodDecl->getNumParams() == 0)
return true;
- auto tc2 = loplugin::TypeCheck(methodDecl->getParamDecl(0)->getType());
- if (tc2.LvalueReference().Class("OUStringBuffer")
- || tc2.LvalueReference().Class("OStringBuffer"))
- return false;
auto name = methodDecl->getName();
if (name == "appendUninitialized" || name == "setLength" || name == "remove" || name == "insert"
@@ -338,9 +321,7 @@ bool BufferAdd::isSideEffectFree(Expr const* expr)
if (auto calleeMethodDecl = dyn_cast_or_null<CXXMethodDecl>(callExpr->getCalleeDecl()))
if (calleeMethodDecl && calleeMethodDecl->getIdentifier())
{
- auto name = calleeMethodDecl->getName();
- if (callExpr->getNumArgs() > 0
- && (name == "number" || name == "unacquired" || name == "boolean"))
+ if (callExpr->getNumArgs() > 0)
{
auto tc = loplugin::TypeCheck(calleeMethodDecl->getParent());
if (tc.Class("OUString") || tc.Class("OString"))
diff --git a/compilerplugins/clang/test/bufferadd.cxx b/compilerplugins/clang/test/bufferadd.cxx
index 7d8d9a693b9f..a9f28b13b55a 100644
--- a/compilerplugins/clang/test/bufferadd.cxx
+++ b/compilerplugins/clang/test/bufferadd.cxx
@@ -46,6 +46,24 @@ void f4(sal_Unicode const* pPathBegin)
v.append(pPathBegin, 12);
v.append("aaaa");
}
+void f5(OUStringBuffer& input)
+{
+ // expected-error@+1 {{convert this append sequence into a *String + sequence [loplugin:bufferadd]}}
+ OUStringBuffer v(input);
+ v.append("aaaa");
+}
+struct Footer
+{
+ OStringBuffer m_descriptorStart;
+ OString m_descriptorEnd;
+ OString f8() const
+ {
+ // expected-error@+1 {{convert this append sequence into a *String + sequence [loplugin:bufferadd]}}
+ OStringBuffer buf(m_descriptorStart);
+ buf.append(m_descriptorEnd);
+ return buf.makeStringAndClear();
+ }
+};
}
namespace test2