Skip to content

Commit dd155b5

Browse files
committed
Fixed danmar#4487 (False positive: variable is not assigned a value (pointer alias))
1 parent 54d398c commit dd155b5

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

lib/checkunusedvar.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,16 @@ static const Token* doAssignment(Variables &variables, const Token *tok, bool de
605605
}
606606
}
607607

608+
// Possible pointer alias
609+
else if (Token::Match(tok, "%var% = %var% ;")) {
610+
const unsigned int varid2 = tok->tokAt(2)->varId();
611+
Variables::VariableUsage *var2 = variables.find(varid2);
612+
if (var2 && (var2->_type == Variables::array ||
613+
var2->_type == Variables::pointer)) {
614+
variables.use(varid2,tok);
615+
}
616+
}
617+
608618
return tok;
609619
}
610620

test/testunusedvar.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class TestUnusedVar : public TestFixture {
104104
TEST_CASE(localvaralias10); // ticket #2004
105105
TEST_CASE(localvaralias11); // ticket #4423 - iterator
106106
TEST_CASE(localvaralias12); // ticket #4394
107+
TEST_CASE(localvaralias13); // ticket #4487
107108
TEST_CASE(localvarasm);
108109
TEST_CASE(localvarstatic);
109110
TEST_CASE(localvarextern);
@@ -2744,6 +2745,22 @@ class TestUnusedVar : public TestFixture {
27442745
ASSERT_EQUALS("", errout.str());
27452746
}
27462747

2748+
void localvaralias13() { // #4487
2749+
functionVariableUsage("void f(char *p) {\n"
2750+
" char a[4];\n"
2751+
" p = a;\n"
2752+
" strcpy(p, \"x\");\n"
2753+
"}");
2754+
ASSERT_EQUALS("", errout.str());
2755+
2756+
functionVariableUsage("void f(char *p) {\n"
2757+
" char a[4];\n"
2758+
" p = a;\n"
2759+
" strcpy(p, \"x\");\n"
2760+
"}");
2761+
TODO_ASSERT_EQUALS("a is assigned value that is never used", "", errout.str());
2762+
}
2763+
27472764
void localvarasm() {
27482765
functionVariableUsage("void foo(int &b)\n"
27492766
"{\n"

0 commit comments

Comments
 (0)