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"