Skip to content

Commit 733b8d9

Browse files
committed
do not perform whole program analysis with UNUSEDFUNCTION_ONLY hack
1 parent 40b7ac2 commit 733b8d9

3 files changed

Lines changed: 30 additions & 31 deletions

File tree

cli/singleexecutor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ unsigned int SingleExecutor::check()
6767
reportStatus(c, mFileSettings.size(), c, mFileSettings.size());
6868
}
6969

70+
// TODO: CppCheckExecutor::check_internal() is also invoking the whole program analysis - is it run twice?
7071
if (mCppcheck.analyseWholeProgram())
7172
result++;
7273

lib/cppcheck.cpp

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,22 +1798,25 @@ void CppCheck::analyseClangTidy(const FileSettings &fileSettings)
17981798
bool CppCheck::analyseWholeProgram()
17991799
{
18001800
bool errors = false;
1801-
// Analyse the tokens
1802-
CTU::FileInfo ctu;
1803-
if (mSettings.useSingleJob() || !mSettings.buildDir.empty())
1804-
{
1805-
for (const Check::FileInfo *fi : mFileInfo) {
1806-
const auto *fi2 = dynamic_cast<const CTU::FileInfo *>(fi);
1807-
if (fi2) {
1808-
ctu.functionCalls.insert(ctu.functionCalls.end(), fi2->functionCalls.cbegin(), fi2->functionCalls.cend());
1809-
ctu.nestedCalls.insert(ctu.nestedCalls.end(), fi2->nestedCalls.cbegin(), fi2->nestedCalls.cend());
1801+
1802+
if (!Settings::unusedFunctionOnly()) {
1803+
// Analyse the tokens
1804+
CTU::FileInfo ctu;
1805+
if (mSettings.useSingleJob() || !mSettings.buildDir.empty())
1806+
{
1807+
for (const Check::FileInfo *fi : mFileInfo) {
1808+
const auto *fi2 = dynamic_cast<const CTU::FileInfo *>(fi);
1809+
if (fi2) {
1810+
ctu.functionCalls.insert(ctu.functionCalls.end(), fi2->functionCalls.cbegin(), fi2->functionCalls.cend());
1811+
ctu.nestedCalls.insert(ctu.nestedCalls.end(), fi2->nestedCalls.cbegin(), fi2->nestedCalls.cend());
1812+
}
18101813
}
18111814
}
1812-
}
18131815

1814-
// cppcheck-suppress shadowFunction - TODO: fix this
1815-
for (Check *check : Check::instances())
1816-
errors |= check->analyseWholeProgram(ctu, mFileInfo, mSettings, mErrorLogger); // TODO: ctu
1816+
// cppcheck-suppress shadowFunction - TODO: fix this
1817+
for (Check *check : Check::instances())
1818+
errors |= check->analyseWholeProgram(ctu, mFileInfo, mSettings, mErrorLogger); // TODO: ctu
1819+
}
18171820

18181821
if (mUnusedFunctionsCheck)
18191822
errors |= mUnusedFunctionsCheck->check(mSettings, mErrorLogger);
@@ -1823,9 +1826,16 @@ bool CppCheck::analyseWholeProgram()
18231826

18241827
unsigned int CppCheck::analyseWholeProgram(const std::string &buildDir, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const std::string& ctuInfo)
18251828
{
1826-
executeAddonsWholeProgram(files, fileSettings, ctuInfo);
18271829
if (mSettings.checks.isEnabled(Checks::unusedFunction))
18281830
CheckUnusedFunctions::analyseWholeProgram(mSettings, mErrorLogger, buildDir);
1831+
1832+
if (mUnusedFunctionsCheck)
1833+
mUnusedFunctionsCheck->check(mSettings, mErrorLogger);
1834+
1835+
if (Settings::unusedFunctionOnly())
1836+
return mLogger->exitcode();
1837+
1838+
executeAddonsWholeProgram(files, fileSettings, ctuInfo);
18291839
std::list<Check::FileInfo*> fileInfoList;
18301840
CTU::FileInfo ctuFileInfo;
18311841

@@ -1876,9 +1886,6 @@ unsigned int CppCheck::analyseWholeProgram(const std::string &buildDir, const st
18761886
for (Check *check : Check::instances())
18771887
check->analyseWholeProgram(ctuFileInfo, fileInfoList, mSettings, mErrorLogger);
18781888

1879-
if (mUnusedFunctionsCheck)
1880-
mUnusedFunctionsCheck->check(mSettings, mErrorLogger);
1881-
18821889
for (Check::FileInfo *fi : fileInfoList)
18831890
delete fi;
18841891

test/cli/other_test.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4034,35 +4034,26 @@ def __test_active_checkers(tmp_path, active_cnt, total_cnt, use_misra=False, use
40344034

40354035

40364036
def test_active_unusedfunction_only(tmp_path):
4037-
# TODO: should only report a single active check
4038-
__test_active_checkers(tmp_path, 5, 966, use_unusedfunction_only=True)
4037+
__test_active_checkers(tmp_path, 1, 966, use_unusedfunction_only=True)
40394038

40404039

40414040
def test_active_unusedfunction_only_builddir(tmp_path):
40424041
# TODO: should only report a single active check
40434042
checkers_exp = [
4044-
'CheckBufferOverrun::analyseWholeProgram',
4045-
'CheckClass::analyseWholeProgram',
4046-
'CheckNullPointer::analyseWholeProgram',
4047-
'CheckUninitVar::analyseWholeProgram',
4048-
'CheckUnusedFunctions::check',
4043+
'CheckUnusedFunctions::check'
40494044
]
4050-
__test_active_checkers(tmp_path, 5, 966, use_unusedfunction_only=True, checkers_exp=checkers_exp)
4045+
__test_active_checkers(tmp_path, 1, 966, use_unusedfunction_only=True, checkers_exp=checkers_exp)
40514046

40524047

40534048
def test_active_unusedfunction_only_misra(tmp_path):
40544049
# TODO: should only report a single active check
4055-
__test_active_checkers(tmp_path, 267, 1166, use_unusedfunction_only=True, use_misra=True)
4050+
__test_active_checkers(tmp_path, 263, 1166, use_unusedfunction_only=True, use_misra=True)
40564051

40574052

40584053
@pytest.mark.xfail(strict=True) # TODO: active count and checkers.txt differ
40594054
def test_active_unusedfunction_only_misra_builddir(tmp_path):
40604055
# TODO: should only report a single active check
40614056
checkers_exp = [
4062-
'CheckBufferOverrun::analyseWholeProgram',
4063-
'CheckClass::analyseWholeProgram',
4064-
'CheckNullPointer::analyseWholeProgram',
4065-
'CheckUninitVar::analyseWholeProgram',
40664057
'CheckUnusedFunctions::check',
40674058
'Misra C: 1.2',
40684059
'Misra C: 1.4',
@@ -4195,4 +4186,4 @@ def test_active_unusedfunction_only_misra_builddir(tmp_path):
41954186
'Misra C: 9.4',
41964187
'Misra C: 9.5'
41974188
]
4198-
__test_active_checkers(tmp_path, 267, 1166, use_unusedfunction_only=True, use_misra=True, checkers_exp=checkers_exp)
4189+
__test_active_checkers(tmp_path, 263, 1166, use_unusedfunction_only=True, use_misra=True, checkers_exp=checkers_exp)

0 commit comments

Comments
 (0)