Skip to content

Commit bce99a9

Browse files
committed
Fixed cppcheck-opensource#4394 (FP: Variable 'a' is not assigned a value)
1 parent e46f0cf commit bce99a9

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

lib/checkunusedvar.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,13 @@ static const Token* doAssignment(Variables &variables, const Token *tok, bool de
427427
}
428428
tok = tok->next();
429429

430-
if (Token::Match(tok, "&| %var%") ||
431-
Token::Match(tok, "( const| struct|union| %type% *| ) &| %var%") ||
432-
Token::Match(tok, "( const| struct|union| %type% *| ) ( &| %var%") ||
430+
if (Token::Match(tok, "( const| struct|union| %type% * ) ( ("))
431+
tok = tok->link()->next();
432+
433+
if (Token::Match(tok, "( [(<] const| struct|union| %type% *| [>)]"))
434+
tok = tok->next();
435+
436+
if (Token::Match(tok, "(| &| %var%") ||
433437
Token::Match(tok->next(), "< const| struct|union| %type% *| > ( &| %var%")) {
434438
bool addressOf = false;
435439

test/testunusedvar.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class TestUnusedVar : public TestFixture {
103103
TEST_CASE(localvaralias9); // ticket #1996
104104
TEST_CASE(localvaralias10); // ticket #2004
105105
TEST_CASE(localvaralias11); // ticket #4423 - iterator
106+
TEST_CASE(localvaralias12); // ticket #4394
106107
TEST_CASE(localvarasm);
107108
TEST_CASE(localvarstatic);
108109
TEST_CASE(localvarextern);
@@ -2727,6 +2728,15 @@ class TestUnusedVar : public TestFixture {
27272728
ASSERT_EQUALS("", errout.str());
27282729
}
27292730

2731+
void localvaralias12() { // #4394
2732+
functionVariableUsage("void f(void) {\n"
2733+
" int a[4];\n"
2734+
" int *b = (int*)((int*)a+1);\n"
2735+
" x(b);\n"
2736+
"}");
2737+
ASSERT_EQUALS("", errout.str());
2738+
}
2739+
27302740
void localvarasm() {
27312741
functionVariableUsage("void foo(int &b)\n"
27322742
"{\n"

0 commit comments

Comments
 (0)