Merge pull request #184 from felipensp/uninitialized_var_typeof

- Fixed false positive when using typeof/__alignof__
This commit is contained in:
Daniel Marjamäki 2013-10-13 01:43:18 -07:00
commit 9e12bdf9cb
2 changed files with 10 additions and 0 deletions

View File

@ -1603,6 +1603,10 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, bool cpp
if (vartok->previous()->str() == "return") if (vartok->previous()->str() == "return")
return true; return true;
// Passing variable to typeof/__alignof__
if (Token::Match(vartok->tokAt(-3), "typeof|__alignof__ ( * %var%"))
return false;
// Passing variable to function.. // Passing variable to function..
if (Token::Match(vartok->previous(), "[(,] %var% [,)]") || Token::Match(vartok->tokAt(-2), "[(,] & %var% [,)]")) { if (Token::Match(vartok->previous(), "[(,] %var% [,)]") || Token::Match(vartok->tokAt(-2), "[(,] & %var% [,)]")) {
const bool address(vartok->previous()->str() == "&"); const bool address(vartok->previous()->str() == "&");

View File

@ -1963,6 +1963,12 @@ private:
" TYPEOF(s->status);\n" " TYPEOF(s->status);\n"
"}"); "}");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
checkUninitVar("void f() {\n"
" #define w(x) ({ x z; (x*)z; })\n"
" int *n = w(typeof(*n));\n"
"}");
ASSERT_EQUALS("", errout.str());
} }