Skip to content

Commit 309aa8a

Browse files
authored
Fixed #12370 (Premium misra/cert/autosar: enable all corresponding checkers in open source cppcheck) (#5901)
1 parent 7577ad6 commit 309aa8a

18 files changed

Lines changed: 302 additions & 55 deletions

cli/cmdlineparser.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,12 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
913913
mSettings.premiumArgs += "--" + p;
914914
if (p == "misra-c-2012" || p == "misra-c-2023")
915915
mSettings.addons.emplace("misra");
916+
if (startsWith(p, "autosar") || startsWith(p, "cert") || startsWith(p, "misra")) {
917+
// All checkers related to the coding standard should be enabled. The coding standards
918+
// do not all undefined behavior or portability issues.
919+
mSettings.addEnabled("warning");
920+
mSettings.addEnabled("portability");
921+
}
916922
}
917923

918924
// --project

createrelease

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
# Create release candidate
66
# ========================
77
#
8+
# check every isPremiumEnabled call:
9+
# - every id should be in --errorlist
10+
# - premiumaddon: check coverage.py
11+
#
812
# Windows installer:
913
# - ensure latest build was successful
1014
# - ensure cfg files etc are included (win_installer/cppcheck.wxs)

lib/checkautovariables.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ void CheckAutoVariables::assignFunctionArg()
210210
{
211211
const bool printStyle = mSettings->severity.isEnabled(Severity::style);
212212
const bool printWarning = mSettings->severity.isEnabled(Severity::warning);
213-
if (!printStyle && !printWarning)
213+
if (!printStyle && !printWarning && !mSettings->isPremiumEnabled("uselessAssignmentPtrArg"))
214214
return;
215215

216216
logChecker("CheckAutoVariables::assignFunctionArg"); // style,warning

lib/checkbool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static bool isBool(const Variable* var)
5050
//---------------------------------------------------------------------------
5151
void CheckBool::checkIncrementBoolean()
5252
{
53-
if (!mSettings->severity.isEnabled(Severity::style))
53+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("incrementboolean"))
5454
return;
5555

5656
logChecker("CheckBool::checkIncrementBoolean"); // style

lib/checkclass.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void CheckClass::constructors()
127127
{
128128
const bool printStyle = mSettings->severity.isEnabled(Severity::style);
129129
const bool printWarnings = mSettings->severity.isEnabled(Severity::warning);
130-
if (!printStyle && !printWarnings)
130+
if (!printStyle && !printWarnings && !mSettings->isPremiumEnabled("uninitMemberVar"))
131131
return;
132132

133133
logChecker("CheckClass::checkConstructors"); // style,warning
@@ -336,7 +336,7 @@ void CheckClass::constructors()
336336

337337
void CheckClass::checkExplicitConstructors()
338338
{
339-
if (!mSettings->severity.isEnabled(Severity::style))
339+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("noExplicitConstructor"))
340340
return;
341341

342342
logChecker("CheckClass::checkExplicitConstructors"); // style
@@ -1275,7 +1275,7 @@ static bool checkFunctionUsage(const Function *privfunc, const Scope* scope)
12751275

12761276
void CheckClass::privateFunctions()
12771277
{
1278-
if (!mSettings->severity.isEnabled(Severity::style))
1278+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("unusedPrivateFunction"))
12791279
return;
12801280

12811281
logChecker("CheckClass::privateFunctions"); // style
@@ -1564,7 +1564,7 @@ void CheckClass::memsetErrorFloat(const Token *tok, const std::string &type)
15641564

15651565
void CheckClass::operatorEqRetRefThis()
15661566
{
1567-
if (!mSettings->severity.isEnabled(Severity::style))
1567+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("operatorEqRetRefThis"))
15681568
return;
15691569

15701570
logChecker("CheckClass::operatorEqRetRefThis"); // style
@@ -2090,7 +2090,9 @@ void CheckClass::checkConst()
20902090
if (!mSettings->certainty.isEnabled(Certainty::inconclusive))
20912091
return;
20922092

2093-
if (!mSettings->severity.isEnabled(Severity::style))
2093+
if (!mSettings->severity.isEnabled(Severity::style) &&
2094+
!mSettings->isPremiumEnabled("functionConst") &&
2095+
!mSettings->isPremiumEnabled("functionStatic"))
20942096
return;
20952097

20962098
logChecker("CheckClass::checkConst"); // style,inconclusive
@@ -2639,7 +2641,7 @@ namespace { // avoid one-definition-rule violation
26392641

26402642
void CheckClass::initializerListOrder()
26412643
{
2642-
if (!mSettings->severity.isEnabled(Severity::style))
2644+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("initializerList"))
26432645
return;
26442646

26452647
// This check is not inconclusive. However it only determines if the initialization
@@ -3137,7 +3139,7 @@ void CheckClass::copyCtorAndEqOperatorError(const Token *tok, const std::string
31373139

31383140
void CheckClass::checkOverride()
31393141
{
3140-
if (!mSettings->severity.isEnabled(Severity::style))
3142+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("missingOverride"))
31413143
return;
31423144
if (mSettings->standards.cpp < Standards::CPP11)
31433145
return;
@@ -3237,7 +3239,7 @@ static bool compareTokenRanges(const Token* start1, const Token* end1, const Tok
32373239

32383240
void CheckClass::checkUselessOverride()
32393241
{
3240-
if (!mSettings->severity.isEnabled(Severity::style))
3242+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("uselessOverride"))
32413243
return;
32423244

32433245
logChecker("CheckClass::checkUselessOverride"); // style

lib/checkcondition.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ bool CheckCondition::isAliased(const std::set<int> &vars) const
8787

8888
void CheckCondition::assignIf()
8989
{
90-
if (!mSettings->severity.isEnabled(Severity::style))
90+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("assignIf"))
9191
return;
9292

9393
logChecker("CheckCondition::assignIf"); // style
@@ -306,7 +306,7 @@ static bool isOperandExpanded(const Token *tok)
306306

307307
void CheckCondition::checkBadBitmaskCheck()
308308
{
309-
if (!mSettings->severity.isEnabled(Severity::style))
309+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("badBitmaskCheck"))
310310
return;
311311

312312
logChecker("CheckCondition::checkBadBitmaskCheck"); // style
@@ -354,7 +354,7 @@ void CheckCondition::badBitmaskCheckError(const Token *tok, bool isNoOp)
354354

355355
void CheckCondition::comparison()
356356
{
357-
if (!mSettings->severity.isEnabled(Severity::style))
357+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("comparisonError"))
358358
return;
359359

360360
logChecker("CheckCondition::comparison"); // style
@@ -472,7 +472,7 @@ bool CheckCondition::isOverlappingCond(const Token * const cond1, const Token *
472472

473473
void CheckCondition::duplicateCondition()
474474
{
475-
if (!mSettings->severity.isEnabled(Severity::style))
475+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("duplicateCondition"))
476476
return;
477477

478478
logChecker("CheckCondition::duplicateCondition"); // style
@@ -523,7 +523,7 @@ void CheckCondition::duplicateConditionError(const Token *tok1, const Token *tok
523523

524524
void CheckCondition::multiCondition()
525525
{
526-
if (!mSettings->severity.isEnabled(Severity::style))
526+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("multiCondition"))
527527
return;
528528

529529
logChecker("CheckCondition::multiCondition"); // style
@@ -1123,7 +1123,7 @@ void CheckCondition::checkIncorrectLogicOperator()
11231123
{
11241124
const bool printStyle = mSettings->severity.isEnabled(Severity::style);
11251125
const bool printWarning = mSettings->severity.isEnabled(Severity::warning);
1126-
if (!printWarning && !printStyle)
1126+
if (!printWarning && !printStyle && !mSettings->isPremiumEnabled("incorrectLogicOperator"))
11271127
return;
11281128
const bool printInconclusive = mSettings->certainty.isEnabled(Certainty::inconclusive);
11291129

@@ -1415,7 +1415,7 @@ static int countPar(const Token *tok1, const Token *tok2)
14151415
//---------------------------------------------------------------------------
14161416
void CheckCondition::clarifyCondition()
14171417
{
1418-
if (!mSettings->severity.isEnabled(Severity::style))
1418+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("clarifyCondition"))
14191419
return;
14201420

14211421
const bool isC = mTokenizer->isC();
@@ -1481,7 +1481,9 @@ void CheckCondition::clarifyConditionError(const Token *tok, bool assign, bool b
14811481

14821482
void CheckCondition::alwaysTrueFalse()
14831483
{
1484-
if (!mSettings->severity.isEnabled(Severity::style))
1484+
if (!mSettings->severity.isEnabled(Severity::style) &&
1485+
!mSettings->isPremiumEnabled("alwaysTrue") &&
1486+
!mSettings->isPremiumEnabled("alwaysFalse"))
14851487
return;
14861488

14871489
logChecker("CheckCondition::alwaysTrueFalse"); // style
@@ -1783,7 +1785,7 @@ void CheckCondition::pointerAdditionResultNotNullError(const Token *tok, const T
17831785

17841786
void CheckCondition::checkDuplicateConditionalAssign()
17851787
{
1786-
if (!mSettings->severity.isEnabled(Severity::style))
1788+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("duplicateConditionalAssign"))
17871789
return;
17881790

17891791
logChecker("CheckCondition::checkDuplicateConditionalAssign"); // style
@@ -1862,7 +1864,7 @@ void CheckCondition::duplicateConditionalAssignError(const Token *condTok, const
18621864

18631865
void CheckCondition::checkAssignmentInCondition()
18641866
{
1865-
if (!mSettings->severity.isEnabled(Severity::style))
1867+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("assignmentInCondition"))
18661868
return;
18671869

18681870
logChecker("CheckCondition::checkAssignmentInCondition"); // style
@@ -1909,7 +1911,7 @@ void CheckCondition::assignmentInCondition(const Token *eq)
19091911

19101912
void CheckCondition::checkCompareValueOutOfTypeRange()
19111913
{
1912-
if (!mSettings->severity.isEnabled(Severity::style))
1914+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("compareValueOutOfTypeRange"))
19131915
return;
19141916

19151917
if (mSettings->platform.type == Platform::Type::Native ||

lib/checkexceptionsafety.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ void CheckExceptionSafety::deallocThrowError(const Token * const tok, const std:
169169
//---------------------------------------------------------------------------
170170
void CheckExceptionSafety::checkRethrowCopy()
171171
{
172-
if (!mSettings->severity.isEnabled(Severity::style))
172+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("rethrowcopy"))
173173
return;
174174

175175
logChecker("CheckExceptionSafety::checkRethrowCopy"); // style
@@ -213,7 +213,7 @@ void CheckExceptionSafety::rethrowCopyError(const Token * const tok, const std::
213213
//---------------------------------------------------------------------------
214214
void CheckExceptionSafety::checkCatchExceptionByValue()
215215
{
216-
if (!mSettings->severity.isEnabled(Severity::style))
216+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("catchexceptionbyvalue"))
217217
return;
218218

219219
logChecker("CheckExceptionSafety::checkCatchExceptionByValue"); // style
@@ -329,7 +329,8 @@ void CheckExceptionSafety::noexceptThrowError(const Token * const tok)
329329
//--------------------------------------------------------------------------
330330
void CheckExceptionSafety::unhandledExceptionSpecification()
331331
{
332-
if (!mSettings->severity.isEnabled(Severity::style) || !mSettings->certainty.isEnabled(Certainty::inconclusive))
332+
if ((!mSettings->severity.isEnabled(Severity::style) || !mSettings->certainty.isEnabled(Certainty::inconclusive)) &&
333+
!mSettings->isPremiumEnabled("unhandledexceptionspecification"))
333334
return;
334335

335336
logChecker("CheckExceptionSafety::unhandledExceptionSpecification"); // style,inconclusive

lib/checkfunctions.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ void CheckFunctions::invalidFunctionArgStrError(const Token *tok, const std::str
242242
//---------------------------------------------------------------------------
243243
void CheckFunctions::checkIgnoredReturnValue()
244244
{
245-
if (!mSettings->severity.isEnabled(Severity::warning) && !mSettings->severity.isEnabled(Severity::style))
245+
if (!mSettings->severity.isEnabled(Severity::warning) &&
246+
!mSettings->severity.isEnabled(Severity::style) &&
247+
!mSettings->isPremiumEnabled("ignoredReturnValue"))
246248
return;
247249

248250
logChecker("CheckFunctions::checkIgnoredReturnValue"); // style,warning
@@ -424,7 +426,7 @@ void CheckFunctions::checkMathFunctions()
424426
const bool styleC99 = mSettings->severity.isEnabled(Severity::style) && mSettings->standards.c != Standards::C89 && mSettings->standards.cpp != Standards::CPP03;
425427
const bool printWarnings = mSettings->severity.isEnabled(Severity::warning);
426428

427-
if (!styleC99 && !printWarnings)
429+
if (!styleC99 && !printWarnings && !mSettings->isPremiumEnabled("wrongmathcall"))
428430
return;
429431

430432
logChecker("CheckFunctions::checkMathFunctions"); // style,warning,c99,c++11

lib/checkmemoryleak.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ void CheckMemoryLeakInClass::variable(const Scope *scope, const Token *tokVarnam
635635

636636
void CheckMemoryLeakInClass::unsafeClassError(const Token *tok, const std::string &classname, const std::string &varname)
637637
{
638-
if (!mSettings->severity.isEnabled(Severity::style))
638+
if (!mSettings->severity.isEnabled(Severity::style) && !mSettings->isPremiumEnabled("unsafeClassCanLeak"))
639639
return;
640640

641641
reportError(tok, Severity::style, "unsafeClassCanLeak",

0 commit comments

Comments
 (0)