Skip to content

Commit 3f2d1d0

Browse files
committed
pass references into CheckUnusedFunctions
1 parent 181da04 commit 3f2d1d0

5 files changed

Lines changed: 38 additions & 42 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ $(libcppdir)/checktype.o: lib/checktype.cpp lib/addoninfo.h lib/check.h lib/chec
551551
$(libcppdir)/checkuninitvar.o: lib/checkuninitvar.cpp lib/addoninfo.h lib/astutils.h lib/check.h lib/checknullpointer.h lib/checkuninitvar.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
552552
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkuninitvar.cpp
553553

554-
$(libcppdir)/checkunusedfunctions.o: lib/checkunusedfunctions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/astutils.h lib/check.h lib/checkunusedfunctions.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
554+
$(libcppdir)/checkunusedfunctions.o: lib/checkunusedfunctions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/astutils.h lib/checkunusedfunctions.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
555555
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkunusedfunctions.cpp
556556

557557
$(libcppdir)/checkunusedvar.o: lib/checkunusedvar.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/astutils.h lib/check.h lib/checkunusedvar.h lib/config.h lib/errortypes.h lib/fwdanalysis.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/vfvalue.h

lib/checkunusedfunctions.cpp

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include "checkunusedfunctions.h"
2222

2323
#include "astutils.h"
24-
#include "check.h"
2524
#include "errorlogger.h"
2625
#include "errortypes.h"
2726
#include "library.h"
@@ -75,9 +74,9 @@ void CheckUnusedFunctions::clear()
7574
instance.mFunctionCalls.clear();
7675
}
7776

78-
void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char FileName[], const Settings *settings)
77+
void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char FileName[], const Settings &settings)
7978
{
80-
const bool doMarkup = settings->library.markupFile(FileName);
79+
const bool doMarkup = settings.library.markupFile(FileName);
8180

8281
// Function declarations..
8382
if (!doMarkup) {
@@ -126,21 +125,21 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi
126125
lambdaEndToken = findLambdaEndToken(tok);
127126

128127
// parsing of library code to find called functions
129-
if (settings->library.isexecutableblock(FileName, tok->str())) {
130-
const Token * markupVarToken = tok->tokAt(settings->library.blockstartoffset(FileName));
128+
if (settings.library.isexecutableblock(FileName, tok->str())) {
129+
const Token * markupVarToken = tok->tokAt(settings.library.blockstartoffset(FileName));
131130
// not found
132131
if (!markupVarToken)
133132
continue;
134133
int scope = 0;
135134
bool start = true;
136135
// find all function calls in library code (starts with '(', not if or while etc)
137136
while ((scope || start) && markupVarToken) {
138-
if (markupVarToken->str() == settings->library.blockstart(FileName)) {
137+
if (markupVarToken->str() == settings.library.blockstart(FileName)) {
139138
scope++;
140139
start = false;
141-
} else if (markupVarToken->str() == settings->library.blockend(FileName))
140+
} else if (markupVarToken->str() == settings.library.blockend(FileName))
142141
scope--;
143-
else if (!settings->library.iskeyword(FileName, markupVarToken->str())) {
142+
else if (!settings.library.iskeyword(FileName, markupVarToken->str())) {
144143
mFunctionCalls.insert(markupVarToken->str());
145144
if (mFunctions.find(markupVarToken->str()) != mFunctions.end())
146145
mFunctions[markupVarToken->str()].usedOtherFile = true;
@@ -158,18 +157,18 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi
158157
}
159158

160159
if (!doMarkup // only check source files
161-
&& settings->library.isexporter(tok->str()) && tok->next() != nullptr) {
160+
&& settings.library.isexporter(tok->str()) && tok->next() != nullptr) {
162161
const Token * propToken = tok->next();
163162
while (propToken && propToken->str() != ")") {
164-
if (settings->library.isexportedprefix(tok->str(), propToken->str())) {
163+
if (settings.library.isexportedprefix(tok->str(), propToken->str())) {
165164
const Token* nextPropToken = propToken->next();
166165
const std::string& value = nextPropToken->str();
167166
if (mFunctions.find(value) != mFunctions.end()) {
168167
mFunctions[value].usedOtherFile = true;
169168
}
170169
mFunctionCalls.insert(value);
171170
}
172-
if (settings->library.isexportedsuffix(tok->str(), propToken->str())) {
171+
if (settings.library.isexportedsuffix(tok->str(), propToken->str())) {
173172
const Token* prevPropToken = propToken->previous();
174173
const std::string& value = prevPropToken->str();
175174
if (value != ")" && mFunctions.find(value) != mFunctions.end()) {
@@ -181,7 +180,7 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi
181180
}
182181
}
183182

184-
if (doMarkup && settings->library.isimporter(FileName, tok->str()) && tok->next()) {
183+
if (doMarkup && settings.library.isimporter(FileName, tok->str()) && tok->next()) {
185184
const Token * propToken = tok->next();
186185
if (propToken->next()) {
187186
propToken = propToken->next();
@@ -197,8 +196,8 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi
197196
}
198197
}
199198

200-
if (settings->library.isreflection(tok->str())) {
201-
const int argIndex = settings->library.reflectionArgument(tok->str());
199+
if (settings.library.isreflection(tok->str())) {
200+
const int argIndex = settings.library.reflectionArgument(tok->str());
202201
if (argIndex >= 0) {
203202
const Token * funcToken = tok->next();
204203
int index = 0;
@@ -320,7 +319,7 @@ static bool isOperatorFunction(const std::string & funcName)
320319
return std::find(additionalOperators.cbegin(), additionalOperators.cend(), funcName.substr(operatorPrefix.length())) != additionalOperators.cend();
321320
}
322321

323-
bool CheckUnusedFunctions::check(ErrorLogger * const errorLogger, const Settings& settings) const
322+
bool CheckUnusedFunctions::check(ErrorLogger& errorLogger, const Settings& settings) const
324323
{
325324
using ErrorParams = std::tuple<std::string, unsigned int, unsigned int, std::string>;
326325
std::vector<ErrorParams> errors; // ensure well-defined order
@@ -354,7 +353,7 @@ bool CheckUnusedFunctions::check(ErrorLogger * const errorLogger, const Settings
354353
return !errors.empty();
355354
}
356355

357-
void CheckUnusedFunctions::unusedFunctionError(ErrorLogger * const errorLogger,
356+
void CheckUnusedFunctions::unusedFunctionError(ErrorLogger& errorLogger,
358357
const std::string &filename, unsigned int fileIndex, unsigned int lineNumber,
359358
const std::string &funcname)
360359
{
@@ -365,26 +364,23 @@ void CheckUnusedFunctions::unusedFunctionError(ErrorLogger * const errorLogger,
365364
}
366365

367366
const ErrorMessage errmsg(locationList, emptyString, Severity::style, "$symbol:" + funcname + "\nThe function '$symbol' is never used.", "unusedFunction", CWE561, Certainty::normal);
368-
if (errorLogger)
369-
errorLogger->reportErr(errmsg);
370-
else
371-
Check::writeToErrorList(errmsg);
367+
errorLogger.reportErr(errmsg);
372368
}
373369

374-
void CheckUnusedFunctions::parseTokens(const Tokenizer *tokenizer, const Settings *settings)
370+
void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const Settings &settings)
375371
{
376-
if (!settings->checks.isEnabled(Checks::unusedFunction))
372+
if (!settings.checks.isEnabled(Checks::unusedFunction))
377373
return;
378-
if (settings->useSingleJob() && settings->buildDir.empty())
379-
instance.parseTokens(*tokenizer, tokenizer->list.getFiles().front().c_str(), settings);
374+
if (settings.useSingleJob() && settings.buildDir.empty())
375+
instance.parseTokens(tokenizer, tokenizer.list.getFiles().front().c_str(), settings);
380376
}
381377

382378
bool CheckUnusedFunctions::check(const Settings& settings, ErrorLogger &errorLogger)
383379
{
384380
// TODO
385381
//CheckUnusedFunctions dummy(nullptr, &settings, &errorLogger);
386382
//dummy.logChecker("CheckUnusedFunctions::analyseWholeProgram");
387-
return instance.check(&errorLogger, settings);
383+
return instance.check(errorLogger, settings);
388384
}
389385

390386
CheckUnusedFunctions::FunctionDecl::FunctionDecl(const Function *f)
@@ -414,7 +410,7 @@ namespace {
414410
};
415411
}
416412

417-
void CheckUnusedFunctions::analyseWholeProgram(const Settings &settings, ErrorLogger * const errorLogger, const std::string &buildDir)
413+
void CheckUnusedFunctions::analyseWholeProgram(const Settings &settings, ErrorLogger &errorLogger, const std::string &buildDir)
418414
{
419415
std::map<std::string, Location> decls;
420416
std::set<std::string> calls;

lib/checkunusedfunctions.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ class CPPCHECKLIB CheckUnusedFunctions {
5050
// Parse current tokens and determine..
5151
// * Check what functions are used
5252
// * What functions are declared
53-
void parseTokens(const Tokenizer &tokenizer, const char FileName[], const Settings *settings);
53+
void parseTokens(const Tokenizer &tokenizer, const char FileName[], const Settings &settings);
5454

55-
static void parseTokens(const Tokenizer *tokenizer, const Settings *settings);
55+
static void parseTokens(const Tokenizer &tokenizer, const Settings &settings);
5656

5757
std::string analyzerInfo() const;
5858

59-
static void analyseWholeProgram(const Settings &settings, ErrorLogger * const errorLogger, const std::string &buildDir);
59+
static void analyseWholeProgram(const Settings &settings, ErrorLogger& errorLogger, const std::string &buildDir);
6060

61-
static void getErrorMessages(ErrorLogger *errorLogger) {
61+
static void getErrorMessages(ErrorLogger &errorLogger) {
6262
unusedFunctionError(errorLogger, emptyString, 0, 0, "funcName");
6363
}
6464

@@ -68,9 +68,9 @@ class CPPCHECKLIB CheckUnusedFunctions {
6868
static void clear();
6969

7070
// Return true if an error is reported.
71-
bool check(ErrorLogger * const errorLogger, const Settings& settings) const;
71+
bool check(ErrorLogger& errorLogger, const Settings& settings) const;
7272

73-
static void unusedFunctionError(ErrorLogger * const errorLogger,
73+
static void unusedFunctionError(ErrorLogger& errorLogger,
7474
const std::string &filename, unsigned int fileIndex, unsigned int lineNumber,
7575
const std::string &funcname);
7676

lib/cppcheck.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
665665
if (mSettings.library.markupFile(filename)) {
666666
Tokenizer tokenizer(mSettings, this, &preprocessor);
667667
tokenizer.createTokens(std::move(tokens1));
668-
CheckUnusedFunctions::parseTokens(&tokenizer, &mSettings);
668+
CheckUnusedFunctions::parseTokens(tokenizer, mSettings);
669669
return EXIT_SUCCESS;
670670
}
671671

@@ -928,7 +928,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
928928

929929
// Analyze info..
930930
if (!mSettings.buildDir.empty())
931-
checkUnusedFunctions.parseTokens(tokenizer, filename.c_str(), &mSettings);
931+
checkUnusedFunctions.parseTokens(tokenizer, filename.c_str(), mSettings);
932932

933933
#ifdef HAVE_RULES
934934
// handling of "simple" rules has been removed.
@@ -1130,7 +1130,7 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer)
11301130
}
11311131
}
11321132

1133-
CheckUnusedFunctions::parseTokens(&tokenizer, &mSettings);
1133+
CheckUnusedFunctions::parseTokens(tokenizer, mSettings);
11341134
}
11351135

11361136
#ifdef HAVE_RULES
@@ -1678,7 +1678,7 @@ void CppCheck::getErrorMessages(ErrorLogger &errorlogger)
16781678
for (std::list<Check *>::const_iterator it = Check::instances().cbegin(); it != Check::instances().cend(); ++it)
16791679
(*it)->getErrorMessages(&errorlogger, &s);
16801680

1681-
CheckUnusedFunctions::getErrorMessages(&errorlogger);
1681+
CheckUnusedFunctions::getErrorMessages(errorlogger);
16821682
Preprocessor::getErrorMessages(&errorlogger, s);
16831683
}
16841684

@@ -1791,7 +1791,7 @@ void CppCheck::analyseWholeProgram(const std::string &buildDir, const std::list<
17911791
return;
17921792
}
17931793
if (mSettings.checks.isEnabled(Checks::unusedFunction))
1794-
CheckUnusedFunctions::analyseWholeProgram(mSettings, this, buildDir);
1794+
CheckUnusedFunctions::analyseWholeProgram(mSettings, *this, buildDir);
17951795
std::list<Check::FileInfo*> fileInfoList;
17961796
CTU::FileInfo ctuFileInfo;
17971797

test/testunusedfunctions.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ class TestUnusedFunctions : public TestFixture {
9696

9797
// Check for unused functions..
9898
CheckUnusedFunctions checkUnusedFunctions;
99-
checkUnusedFunctions.parseTokens(tokenizer, "someFile.c", &settings1);
99+
checkUnusedFunctions.parseTokens(tokenizer, "someFile.c", settings1);
100100
// check() returns error if and only if errout is not empty.
101-
if ((checkUnusedFunctions.check)(this, settings1)) {
101+
if ((checkUnusedFunctions.check)(*this, settings1)) {
102102
ASSERT(!errout.str().empty());
103103
} else {
104104
ASSERT_EQUALS("", errout.str());
@@ -556,11 +556,11 @@ class TestUnusedFunctions : public TestFixture {
556556
std::istringstream istr(code);
557557
ASSERT(tokenizer2.tokenize(istr, fname.str().c_str()));
558558

559-
c.parseTokens(tokenizer2, "someFile.c", &settings);
559+
c.parseTokens(tokenizer2, "someFile.c", settings);
560560
}
561561

562562
// Check for unused functions..
563-
(c.check)(this, settings);
563+
(c.check)(*this, settings);
564564

565565
ASSERT_EQUALS("[test1.cpp:1]: (style) The function 'f' is never used.\n", errout.str());
566566
}

0 commit comments

Comments
 (0)