diff --git a/lib/checkother.cpp b/lib/checkother.cpp index 2f5def49f..8ea05a282 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -500,6 +500,15 @@ private: void Variables::alias(unsigned int varid1, unsigned int varid2) { + // alias to self + if (varid1 == varid2) + { + VariableUsage *var = find(varid1); + if (var) + var->use(); + return; + } + std::set::iterator i; VariableUsage *var1 = find(varid1); diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 799b2be23..644af8272 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -74,7 +74,8 @@ private: TEST_CASE(localvar9); // ticket #1605 TEST_CASE(localvar10); TEST_CASE(localvar11); - TEST_CASE(localvaralias); + TEST_CASE(localvaralias1); + TEST_CASE(localvaralias2); // ticket #1637 TEST_CASE(localvarasm); // Don't give false positives for variables in structs/unions @@ -926,7 +927,7 @@ private: ASSERT_EQUALS("", errout.str()); } - void localvaralias() + void localvaralias1() { functionVariableUsage("void foo()\n" "{\n" @@ -1183,6 +1184,16 @@ private: "[test.cpp:5]: (style) Variable 's' is assigned a value that is never used\n", errout.str()); } + void localvaralias2() // ticket 1637 + { + functionVariableUsage("void foo()\n" + "{\n" + " int * a;\n" + " a = a;\n" + "}\n"); + ASSERT_EQUALS(std::string(""), errout.str()); + } + void localvarasm() { functionVariableUsage("void foo(int &b)\n"