Skip to content

Commit 1e79f7f

Browse files
authored
Fix #14476 (Premium Misra: skip bailout; condition '2>3' is always false) (danmar#8195)
1 parent 7e6f5e6 commit 1e79f7f

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

lib/checkcondition.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,10 +1502,11 @@ void CheckCondition::clarifyConditionError(const Token *tok, bool assign, bool b
15021502

15031503
void CheckCondition::alwaysTrueFalse()
15041504
{
1505-
if (!mSettings->severity.isEnabled(Severity::style) &&
1506-
!mSettings->isPremiumEnabled("alwaysTrue") &&
1507-
!mSettings->isPremiumEnabled("alwaysFalse") &&
1508-
!mSettings->isPremiumEnabled("knownConditionTrueFalse"))
1505+
const bool pedantic = mSettings->isPremiumEnabled("alwaysTrue") ||
1506+
mSettings->isPremiumEnabled("alwaysFalse") ||
1507+
mSettings->isPremiumEnabled("knownConditionTrueFalse");
1508+
1509+
if (!pedantic && !mSettings->severity.isEnabled(Severity::style))
15091510
return;
15101511

15111512
logChecker("CheckCondition::alwaysTrueFalse"); // style
@@ -1588,7 +1589,8 @@ void CheckCondition::alwaysTrueFalse()
15881589
true,
15891590
true))
15901591
continue;
1591-
if (isConstVarExpression(tok, [](const Token* tok) {
1592+
1593+
if (!pedantic && isConstVarExpression(tok, [](const Token* tok) {
15921594
return Token::Match(tok, "[|(|&|+|-|*|/|%|^|>>|<<") && !Token::simpleMatch(tok, "( )");
15931595
}))
15941596
continue;

test/testcondition.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ class TestCondition : public TestFixture {
110110
TEST_CASE(alwaysTrueLoop);
111111
TEST_CASE(alwaysTrueTryCatch);
112112
TEST_CASE(alwaysTrueSideEffect);
113+
TEST_CASE(alwaysTruePremiumMisra);
113114
TEST_CASE(multiConditionAlwaysTrue);
114115
TEST_CASE(duplicateCondition);
115116

@@ -5625,6 +5626,20 @@ class TestCondition : public TestFixture {
56255626
ASSERT_EQUALS("", errout_str());
56265627
}
56275628

5629+
void alwaysTruePremiumMisra() {
5630+
const char code[] = "void f() {\n"
5631+
" if (3 > 2) {}\n"
5632+
"}";
5633+
5634+
check(code);
5635+
ASSERT_EQUALS("", errout_str());
5636+
5637+
Settings misraSettings;
5638+
misraSettings.premiumArgs = "--misra-c-2012";
5639+
check(code, misraSettings);
5640+
ASSERT_EQUALS("[test.cpp:2:9]: (style) Condition '3>2' is always true [knownConditionTrueFalse]\n", errout_str());
5641+
}
5642+
56285643
void multiConditionAlwaysTrue() {
56295644
check("void f() {\n"
56305645
" int val = 0;\n"

0 commit comments

Comments
 (0)