Fixed #2311 (False positive: Index out of bounds)
This commit is contained in:
parent
eb0231b48f
commit
2d97189486
|
@ -6092,6 +6092,10 @@ bool Tokenizer::simplifyKnownVariables()
|
||||||
if (pointeralias && Token::Match(tok3, ("!!= " + value).c_str()))
|
if (pointeralias && Token::Match(tok3, ("!!= " + value).c_str()))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Stop if do is found
|
||||||
|
if (tok3->str() == "do")
|
||||||
|
break;
|
||||||
|
|
||||||
// Stop if something like 'while (--var)' is found
|
// Stop if something like 'while (--var)' is found
|
||||||
if (tok3->str() == "for" || tok3->str() == "while" || tok3->str() == "do")
|
if (tok3->str() == "for" || tok3->str() == "while" || tok3->str() == "do")
|
||||||
{
|
{
|
||||||
|
|
|
@ -120,6 +120,7 @@ private:
|
||||||
TEST_CASE(simplifyKnownVariables31);
|
TEST_CASE(simplifyKnownVariables31);
|
||||||
TEST_CASE(simplifyKnownVariables32); // const
|
TEST_CASE(simplifyKnownVariables32); // const
|
||||||
TEST_CASE(simplifyKnownVariables33); // struct variable
|
TEST_CASE(simplifyKnownVariables33); // struct variable
|
||||||
|
TEST_CASE(simplifyKnownVariables34);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutAssign);
|
TEST_CASE(simplifyKnownVariablesBailOutAssign);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutFor1);
|
TEST_CASE(simplifyKnownVariablesBailOutFor1);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutFor2);
|
TEST_CASE(simplifyKnownVariablesBailOutFor2);
|
||||||
|
@ -1852,6 +1853,21 @@ private:
|
||||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simplifyKnownVariables34()
|
||||||
|
{
|
||||||
|
const char code[] = "void f() {\n"
|
||||||
|
" int x = 10;\n"
|
||||||
|
" do { cin >> x; } while (x > 5);\n"
|
||||||
|
" a[x] = 0;\n"
|
||||||
|
"}\n";
|
||||||
|
const char expected[] = "void f ( ) {\n"
|
||||||
|
"int x ; x = 10 ;\n"
|
||||||
|
"do { cin >> x ; } while ( 5 < x ) ;\n"
|
||||||
|
"a [ x ] = 0 ;\n"
|
||||||
|
"}";
|
||||||
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
||||||
|
}
|
||||||
|
|
||||||
void simplifyKnownVariablesBailOutAssign()
|
void simplifyKnownVariablesBailOutAssign()
|
||||||
{
|
{
|
||||||
const char code[] = "int foo() {\n"
|
const char code[] = "int foo() {\n"
|
||||||
|
|
Loading…
Reference in New Issue