Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,10 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
"bughunting",
"safety"};

if (std::strcmp(argv[i], "--premium=safety-off") == 0) {
mSettings.safety = false;
continue;
}
if (std::strcmp(argv[i], "--premium=safety") == 0)
mSettings.safety = true;
if (!mSettings.premiumArgs.empty())
Expand Down Expand Up @@ -1683,7 +1687,8 @@ void CmdLineParser::printHelp() const
" Other:\n"
" * bughunting Soundy analysis\n"
" * cert-c-int-precision=BITS Integer precision to use in Cert C analysis.\n"
" * safety Safe mode\n";
" * safety Turn on safety certified behavior (ON by default)\n"
" * safety-off Turn off safety certified behavior\n";
}

oss <<
Expand Down Expand Up @@ -1935,6 +1940,8 @@ bool CmdLineParser::loadAddons(Settings& settings)

bool CmdLineParser::loadCppcheckCfg()
{
if (!mSettings.cppcheckCfgProductName.empty())
return true;
const std::string cfgErr = Settings::loadCppcheckCfg(mSettings, mSuppressions, mSettings.debuglookup || mSettings.debuglookupConfig);
if (!cfgErr.empty()) {
mLogger.printError("could not load cppcheck.cfg - " + cfgErr);
Expand Down
2 changes: 1 addition & 1 deletion cli/cppcheckexecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
stdLogger.reportErr(ErrorMessage::getXMLFooter());
}

if (settings.safety && (stdLogger.hasCriticalErrors() || returnValue != 0))
if (settings.safety && stdLogger.hasCriticalErrors())
return EXIT_FAILURE;

if (returnValue)
Expand Down
14 changes: 10 additions & 4 deletions test/cli/premium_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def copy_cppcheck_premium(tmpdir):
"addons": [],
"productName": "NAME",
"about": "NAME",
"safety": false
"safety": true
}
""".replace('NAME', PRODUCT_NAME))

Expand All @@ -43,7 +43,13 @@ def test_misra_c_builtin_style_checks(tmpdir):
f.write('void foo() { int x; y = 0; }')

exe = copy_cppcheck_premium(tmpdir)
_, stdout, stderr = cppcheck(['--premium=autosar', test_file], cppcheck_exe=exe)
assert '' in stdout
assert '[unusedVariable]' in stderr

exitcode, _, stderr = cppcheck(['--premium=autosar', '--xml', test_file], cppcheck_exe=exe)
assert exitcode == 0
assert 'id="unusedVariable"' in stderr
assert 'id="checkersReport"' in stderr

exitcode, _, stderr = cppcheck(['--premium=autosar', '--premium=safety-off', '--xml', test_file], cppcheck_exe=exe)
assert exitcode == 0
assert 'id="unusedVariable"' in stderr
assert 'id="checkersReport"' not in stderr