CheckUnusedVar: dont report false positives for extern variables

This commit is contained in:
Daniel Marjamäki 2012-06-28 17:22:56 +02:00
parent 2e3a08a8c1
commit cb7757f650
2 changed files with 10 additions and 1 deletions

View File

@ -597,7 +597,7 @@ void CheckUnusedVar::checkFunctionVariableUsage_iterateScopes(const Scope* const
if (scope->type != Scope::eClass && scope->type != Scope::eUnion && scope->type != Scope::eStruct) { if (scope->type != Scope::eClass && scope->type != Scope::eUnion && scope->type != Scope::eStruct) {
// Find declarations // Find declarations
for (std::list<Variable>::const_iterator i = scope->varlist.begin(); i != scope->varlist.end(); ++i) { for (std::list<Variable>::const_iterator i = scope->varlist.begin(); i != scope->varlist.end(); ++i) {
if (i->isThrow()) if (i->isThrow() || i->isExtern())
continue; continue;
Variables::VariableType type = Variables::none; Variables::VariableType type = Variables::none;
if (i->isArray() && (i->nameToken()->previous()->str() == "*" || i->nameToken()->strAt(-2) == "*")) if (i->isArray() && (i->nameToken()->previous()->str() == "*" || i->nameToken()->strAt(-2) == "*"))

View File

@ -102,6 +102,7 @@ private:
TEST_CASE(localvaralias10); // ticket #2004 TEST_CASE(localvaralias10); // ticket #2004
TEST_CASE(localvarasm); TEST_CASE(localvarasm);
TEST_CASE(localvarstatic); TEST_CASE(localvarstatic);
TEST_CASE(localvarextern);
TEST_CASE(localvardynamic1); TEST_CASE(localvardynamic1);
TEST_CASE(localvardynamic2); // ticket #2904 TEST_CASE(localvardynamic2); // ticket #2904
TEST_CASE(localvardynamic3); // ticket #3467 TEST_CASE(localvardynamic3); // ticket #3467
@ -2793,6 +2794,14 @@ private:
ASSERT_EQUALS("[test.cpp:4]: (style) Variable 'b' is assigned a value that is never used\n", errout.str()); ASSERT_EQUALS("[test.cpp:4]: (style) Variable 'b' is assigned a value that is never used\n", errout.str());
} }
void localvarextern() {
functionVariableUsage("void foo() {\n"
" extern int i;\n"
" i = 0;\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}
void localvardynamic1() { void localvardynamic1() {
functionVariableUsage("void foo()\n" functionVariableUsage("void foo()\n"
"{\n" "{\n"