diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-03-23 15:35:17 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-03-24 08:39:48 +0100 |
commit | 7a2c36bb69970f20b4896472e2d5a4e41df95b39 (patch) | |
tree | ef07b6383952d5882024531a566078e457617721 /compilerplugins/clang/constantparam.cxx | |
parent | 37c41f2c445ecf519f4137c23fb36f3942328b6b (diff) |
loplugin:constantparam improvements
(1) sanitize call value output, make downstream processing easier
(2) remove bad ignoreLocation() call, which was eliminating a lot of
valueable data and thus generating false positives
Change-Id: I39230c260c5cf717559300913fbc68bc3485b957
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131986
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins/clang/constantparam.cxx')
-rw-r--r-- | compilerplugins/clang/constantparam.cxx | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/compilerplugins/clang/constantparam.cxx b/compilerplugins/clang/constantparam.cxx index f9f87b361bc5..5fd472954a9a 100644 --- a/compilerplugins/clang/constantparam.cxx +++ b/compilerplugins/clang/constantparam.cxx @@ -111,8 +111,6 @@ void ConstantParam::addToCallSet(const FunctionDecl* functionDecl, int paramInde return; if (functionDecl->isVariadic()) return; - if (ignoreLocation(functionDecl)) - return; // ignore stuff that forms part of the stable URE interface if (isInUnoIncludeFile(functionDecl)) return; @@ -122,7 +120,6 @@ void ConstantParam::addToCallSet(const FunctionDecl* functionDecl, int paramInde return; filename = filename.substr(strlen(SRCDIR)+1); - MyCallSiteInfo aInfo; aInfo.returnType = functionDecl->getReturnType().getCanonicalType().getAsString(); @@ -148,8 +145,8 @@ void ConstantParam::addToCallSet(const FunctionDecl* functionDecl, int paramInde aInfo.paramIndex = paramIndex; if (paramIndex < (int)functionDecl->getNumParams()) aInfo.paramType = functionDecl->getParamDecl(paramIndex)->getType().getCanonicalType().getAsString(); - aInfo.callValue = callValue; + aInfo.callValue = callValue; aInfo.sourceLocation = filename.str() + ":" + std::to_string(compiler.getSourceManager().getSpellingLineNumber(expansionLoc)); loplugin::normalizeDotDotInFilePath(aInfo.sourceLocation); @@ -207,10 +204,10 @@ std::string ConstantParam::getCallValue(const Expr* arg) } unsigned n = Lexer::MeasureTokenLength( endLoc, SM, compiler.getLangOpts()); std::string s( p1, p2 - p1 + n); - // strip linefeed and tab characters so they don't interfere with the parsing of the log file - std::replace( s.begin(), s.end(), '\r', ' '); - std::replace( s.begin(), s.end(), '\n', ' '); - std::replace( s.begin(), s.end(), '\t', ' '); + // sanitize call value, makes using command line tools (and python) much less error prone + for (auto const & ch : s) + if (ch < 32) + return "sanitised"; // now normalize the value. For some params, like OUString, we can pass it as OUString() or "" and they are the same thing if (s == "OUString()") |