move loplugin:constparams out of store again
since I have improved and updated it a little. But leave it off by default, since it is pretty expensive Change-Id: I60226bc37eb38ddb5c648e5205aba311a75e7f27 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183570 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
This commit is contained in:
@@ -63,6 +63,27 @@ public:
|
|||||||
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/registry/source/regkey.cxx")
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/registry/source/regkey.cxx")
|
||||||
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/cppu/source/uno/lbenv.cxx")
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/cppu/source/uno/lbenv.cxx")
|
||||||
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/cppuhelper/source/implbase_ex.cxx")
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/cppuhelper/source/implbase_ex.cxx")
|
||||||
|
// legacy code, don't care
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/registry/")
|
||||||
|
// false+
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/cppuhelper/source/compbase.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/comphelper/source/misc/compbase.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/unotools/source/misc/fontcvt.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/source/gdi/pdfwriter_impl2.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/source/treelist/treelist.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/unx/gtk3/gloactiongroup.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/unx/gtk3/customcellrenderer.cxx")
|
||||||
|
// the constructor should not take a const& because it indicates that we are going to modify this Bitmap
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/source/bitmap/BitmapWriteAccess.cxx")
|
||||||
|
// false+ because of #if
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/source/image/ImplImage.cxx")
|
||||||
|
// false+
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/ucb/source/ucp/gio/gio_mount.cxx")
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/ucb/source/ucp/webdav-curl/CurlUri.cxx")
|
||||||
|
// false+ macro
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/unx/gtk3/glomenu.cxx")
|
||||||
|
// false+, called via function pointer
|
||||||
|
|| loplugin::hasPathnamePrefix(fn, SRCDIR "/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx")
|
||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -91,6 +112,7 @@ public:
|
|||||||
pOther->getBeginLoc())
|
pOther->getBeginLoc())
|
||||||
<< pOther->getSourceRange();
|
<< pOther->getSourceRange();
|
||||||
}
|
}
|
||||||
|
//pParmVarDecl->getType().getDesugaredType(compiler.getASTContext()).dump();
|
||||||
//functionDecl->dump();
|
//functionDecl->dump();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -172,14 +194,16 @@ bool ConstParams::CheckTraverseFunctionDecl(FunctionDecl * functionDecl)
|
|||||||
|| compiler.getSourceManager().isMacroArgExpansion(canonicalDecl->getBeginLoc())) {
|
|| compiler.getSourceManager().isMacroArgExpansion(canonicalDecl->getBeginLoc())) {
|
||||||
StringRef name { Lexer::getImmediateMacroName(
|
StringRef name { Lexer::getImmediateMacroName(
|
||||||
canonicalDecl->getBeginLoc(), compiler.getSourceManager(), compiler.getLangOpts()) };
|
canonicalDecl->getBeginLoc(), compiler.getSourceManager(), compiler.getLangOpts()) };
|
||||||
if (name.startswith("DECL_LINK") || name.startswith("DECL_STATIC_LINK"))
|
if (compat::starts_with(name, "DECL_LINK") || compat::starts_with(name, "DECL_STATIC_LINK")
|
||||||
|
|| compat::starts_with(name, "DECL_DLLPRIVATE_STATIC_LINK") )
|
||||||
return false;
|
return false;
|
||||||
auto loc2 = compat::getImmediateExpansionRange(compiler.getSourceManager(), canonicalDecl->getBeginLoc()).first;
|
auto loc2 = compat::getImmediateExpansionRange(compiler.getSourceManager(), canonicalDecl->getBeginLoc()).first;
|
||||||
if (compiler.getSourceManager().isMacroBodyExpansion(loc2))
|
if (compiler.getSourceManager().isMacroBodyExpansion(loc2))
|
||||||
{
|
{
|
||||||
StringRef name2 { Lexer::getImmediateMacroName(
|
StringRef name2 { Lexer::getImmediateMacroName(
|
||||||
loc2, compiler.getSourceManager(), compiler.getLangOpts()) };
|
loc2, compiler.getSourceManager(), compiler.getLangOpts()) };
|
||||||
if (name2.startswith("DECL_DLLPRIVATE_LINK"))
|
if (compat::starts_with(name2, "DECL_DLLPRIVATE_LINK")
|
||||||
|
|| compat::starts_with(name2, "DECL_DLLPRIVATE_STATIC_LINK") )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,13 +213,13 @@ bool ConstParams::CheckTraverseFunctionDecl(FunctionDecl * functionDecl)
|
|||||||
StringRef name = functionDecl->getName();
|
StringRef name = functionDecl->getName();
|
||||||
if ( name == "file_write"
|
if ( name == "file_write"
|
||||||
|| name == "SalMainPipeExchangeSignal_impl"
|
|| name == "SalMainPipeExchangeSignal_impl"
|
||||||
|| name.startswith("SbRtl_")
|
|| compat::starts_with(name, "SbRtl_")
|
||||||
|| name == "GoNext"
|
|| name == "GoNext"
|
||||||
|| name == "GoPrevious"
|
|| name == "GoPrevious"
|
||||||
|| name.startswith("Read_F_")
|
|| compat::starts_with(name, "Read_F_")
|
||||||
// UNO component entry points
|
// UNO component entry points
|
||||||
|| name.endswith("component_getFactory")
|
|| compat::ends_with(name, "component_getFactory")
|
||||||
|| name.endswith("_get_implementation")
|
|| compat::ends_with(name, "_get_implementation")
|
||||||
// callback for some external code?
|
// callback for some external code?
|
||||||
|| name == "ScAddInAsyncCallBack"
|
|| name == "ScAddInAsyncCallBack"
|
||||||
// used as function pointers
|
// used as function pointers
|
||||||
@@ -216,7 +240,10 @@ bool ConstParams::CheckTraverseFunctionDecl(FunctionDecl * functionDecl)
|
|||||||
std::string fqn = functionDecl->getQualifiedNameAsString();
|
std::string fqn = functionDecl->getQualifiedNameAsString();
|
||||||
if ( fqn == "connectivity::jdbc::GlobalRef::set"
|
if ( fqn == "connectivity::jdbc::GlobalRef::set"
|
||||||
|| fqn == "(anonymous namespace)::ReorderNotifier::operator()"
|
|| fqn == "(anonymous namespace)::ReorderNotifier::operator()"
|
||||||
|| fqn == "static_txtattr_cast")
|
|| fqn == "static_txtattr_cast"
|
||||||
|
|| fqn == "ScFormatShell::ExecuteStyle"
|
||||||
|
|| fqn == "SwContentIndexReg::MoveTo"
|
||||||
|
|| fqn == "svt::OGenericUnoAsyncDialog::UnoAsyncDialogEntryGuard::UnoAsyncDialogEntryGuard")
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// calculate the ones we want to check
|
// calculate the ones we want to check
|
||||||
@@ -227,8 +254,7 @@ bool ConstParams::CheckTraverseFunctionDecl(FunctionDecl * functionDecl)
|
|||||||
|| pParmVarDecl->hasAttr<UnusedAttr>())
|
|| pParmVarDecl->hasAttr<UnusedAttr>())
|
||||||
continue;
|
continue;
|
||||||
auto const type = loplugin::TypeCheck(pParmVarDecl->getType());
|
auto const type = loplugin::TypeCheck(pParmVarDecl->getType());
|
||||||
if (!( type.Pointer().NonConst()
|
if (!isPointerOrReferenceToNonConst(pParmVarDecl->getType()))
|
||||||
|| type.LvalueReference().NonConst()))
|
|
||||||
continue;
|
continue;
|
||||||
// since we normally can't change typedefs, just ignore them
|
// since we normally can't change typedefs, just ignore them
|
||||||
if (isa<TypedefType>(pParmVarDecl->getType()))
|
if (isa<TypedefType>(pParmVarDecl->getType()))
|
||||||
@@ -602,6 +628,9 @@ bool ConstParams::isOkForParameter(const QualType& qt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ConstParams::isPointerOrReferenceToNonConst(const QualType& qt) {
|
bool ConstParams::isPointerOrReferenceToNonConst(const QualType& qt) {
|
||||||
|
// cannot do anything useful with typedefs
|
||||||
|
if (qt->isTypedefNameType())
|
||||||
|
return false;
|
||||||
auto const type = loplugin::TypeCheck(qt);
|
auto const type = loplugin::TypeCheck(qt);
|
||||||
if (type.Pointer()) {
|
if (type.Pointer()) {
|
||||||
return !bool(type.Pointer().Const());
|
return !bool(type.Pointer().Const());
|
@@ -1326,6 +1326,7 @@ compilerplugins/clang/commaoperator.cxx
|
|||||||
compilerplugins/clang/compat.hxx
|
compilerplugins/clang/compat.hxx
|
||||||
compilerplugins/clang/constantparam.cxx
|
compilerplugins/clang/constantparam.cxx
|
||||||
compilerplugins/clang/constmethod.cxx
|
compilerplugins/clang/constmethod.cxx
|
||||||
|
compilerplugins/clang/constparams.cxx
|
||||||
compilerplugins/clang/conststringvar.cxx
|
compilerplugins/clang/conststringvar.cxx
|
||||||
compilerplugins/clang/cppunitassertequals.cxx
|
compilerplugins/clang/cppunitassertequals.cxx
|
||||||
compilerplugins/clang/cstylecast.cxx
|
compilerplugins/clang/cstylecast.cxx
|
||||||
@@ -1388,7 +1389,6 @@ compilerplugins/clang/store/changefunctioncalls.cxx
|
|||||||
compilerplugins/clang/store/checkunusedparams.cxx
|
compilerplugins/clang/store/checkunusedparams.cxx
|
||||||
compilerplugins/clang/store/comparisonwithconstant.cxx
|
compilerplugins/clang/store/comparisonwithconstant.cxx
|
||||||
compilerplugins/clang/store/constantfunction.cxx
|
compilerplugins/clang/store/constantfunction.cxx
|
||||||
compilerplugins/clang/store/constparams.cxx
|
|
||||||
compilerplugins/clang/store/countusersofdefaultparams.cxx
|
compilerplugins/clang/store/countusersofdefaultparams.cxx
|
||||||
compilerplugins/clang/store/deadclass.cxx
|
compilerplugins/clang/store/deadclass.cxx
|
||||||
compilerplugins/clang/store/defaultparams.cxx
|
compilerplugins/clang/store/defaultparams.cxx
|
||||||
|
Reference in New Issue
Block a user