From 84c0368bfd2e14306ce76485cb013e07bccebfe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 15 Sep 2012 10:48:17 +0200 Subject: [PATCH] Fixed #3586 (false positive: uninitvar in argument in namespaced function) --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index adb70a508..b8862678b 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -474,7 +474,7 @@ private: // variable is assigned like: "( %var% ) .. =" if (Token::Match(tok.previous(), "( %var% )") && tok2 && tok2->str() == "=") ExecutionPath::bailOutVar(checks, tok.varId()); - else + else if (!(tok.strAt(-2) == ">" && tok.tokAt(-2)->link())) use(checks, &tok); //use_array(checks, &tok); return &tok; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 903becd51..d6e20b468 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -864,14 +864,14 @@ private: checkUninitVar("void f()\n" "{\n" - " char *c1;\n" - " c1=strcpy(c1,\"test\");\n" + " char *c1;\n" + " c1=strcpy(c1,\"test\");\n" "}\n"); TODO_ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: c1\n","", errout.str()); checkUninitVar("void f(char *c1)\n" "{\n" - " c1=strcpy(c1,\"test\");\n" + " c1=strcpy(c1,\"test\");\n" "}\n"); ASSERT_EQUALS("", errout.str()); @@ -1777,6 +1777,12 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar("void f() {\n" // #3586 - calling template function + " int i;\n" + " a::b(i);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // using uninitialized function pointer.. checkUninitVar("void foo()\n" "{\n"