Skip to content

Commit 1583779

Browse files
authored
Fix #13047 (Add a --premium=safety-off option to explicitly turn off safety features) (#6738)
1 parent ecc1b44 commit 1583779

3 files changed

Lines changed: 19 additions & 6 deletions

File tree

cli/cmdlineparser.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,6 +996,10 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
996996
"bughunting",
997997
"safety"};
998998

999+
if (std::strcmp(argv[i], "--premium=safety-off") == 0) {
1000+
mSettings.safety = false;
1001+
continue;
1002+
}
9991003
if (std::strcmp(argv[i], "--premium=safety") == 0)
10001004
mSettings.safety = true;
10011005
if (!mSettings.premiumArgs.empty())
@@ -1683,7 +1687,8 @@ void CmdLineParser::printHelp() const
16831687
" Other:\n"
16841688
" * bughunting Soundy analysis\n"
16851689
" * cert-c-int-precision=BITS Integer precision to use in Cert C analysis.\n"
1686-
" * safety Safe mode\n";
1690+
" * safety Turn on safety certified behavior (ON by default)\n"
1691+
" * safety-off Turn off safety certified behavior\n";
16871692
}
16881693

16891694
oss <<
@@ -1935,6 +1940,8 @@ bool CmdLineParser::loadAddons(Settings& settings)
19351940

19361941
bool CmdLineParser::loadCppcheckCfg()
19371942
{
1943+
if (!mSettings.cppcheckCfgProductName.empty())
1944+
return true;
19381945
const std::string cfgErr = Settings::loadCppcheckCfg(mSettings, mSuppressions, mSettings.debuglookup || mSettings.debuglookupConfig);
19391946
if (!cfgErr.empty()) {
19401947
mLogger.printError("could not load cppcheck.cfg - " + cfgErr);

cli/cppcheckexecutor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
311311
stdLogger.reportErr(ErrorMessage::getXMLFooter());
312312
}
313313

314-
if (settings.safety && (stdLogger.hasCriticalErrors() || returnValue != 0))
314+
if (settings.safety && stdLogger.hasCriticalErrors())
315315
return EXIT_FAILURE;
316316

317317
if (returnValue)

test/cli/premium_test.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def copy_cppcheck_premium(tmpdir):
2626
"addons": [],
2727
"productName": "NAME",
2828
"about": "NAME",
29-
"safety": false
29+
"safety": true
3030
}
3131
""".replace('NAME', PRODUCT_NAME))
3232

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

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

47+
exitcode, _, stderr = cppcheck(['--premium=autosar', '--xml', test_file], cppcheck_exe=exe)
48+
assert exitcode == 0
49+
assert 'id="unusedVariable"' in stderr
50+
assert 'id="checkersReport"' in stderr
51+
52+
exitcode, _, stderr = cppcheck(['--premium=autosar', '--premium=safety-off', '--xml', test_file], cppcheck_exe=exe)
53+
assert exitcode == 0
54+
assert 'id="unusedVariable"' in stderr
55+
assert 'id="checkersReport"' not in stderr

0 commit comments

Comments
 (0)