From f16c30248a4424c6ae36732b476dbdea9e9b09d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= <daniel.marjamaki@gmail.com> Date: Tue, 25 Dec 2012 14:05:29 +0100 Subject: [PATCH] Uninitialized variables: fixed FP when there are function calls where type* is converted to unknown_type --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 34acd00c1..f5c9981a5 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1378,7 +1378,7 @@ bool CheckUninitVar::isVariableUsage(const Scope* scope, const Token *vartok, bo const Token *argStart = arg->typeStartToken(); while (argStart->previous() && argStart->previous()->isName()) argStart = argStart->previous(); - if (Token::Match(argStart, "const| %type% %var% [,)]")) + if (!address && Token::Match(argStart, "const| %type% %var% [,)]")) return true; if (Token::Match(argStart, "const %type% & %var% [,)]")) return true; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index d2e737c58..101c098c5 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2408,6 +2408,13 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void a(pstr s);\n" // address => no error + "void b() {\n" + " char c;\n" + " a(&c);\n" + "}"); + ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void a(const char *c);\n" // const address => error "void b() {\n" " char c;\n"