From f09a5b408bc5cb60a818fefbe5366a3d454cfa37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 17 Dec 2011 16:08:55 +0100 Subject: [PATCH] Uninitialized variables: Fixed false positives when sizeof is used in condition. Ticket: #3369 --- lib/checkuninitvar.cpp | 4 +++- test/testuninitvar.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 0fb9ae662..7d3ecb699 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1089,6 +1089,8 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const unsigned int uninitvarError(tok2, tok2->str()); return true; } + if (Token::Match(tok2, "sizeof|decltype|offsetof (")) + tok2 = tok2->next()->link(); } // goto the { @@ -1141,7 +1143,7 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const unsigned int } // skip sizeof / offsetof - if (Token::Match(tok, "sizeof|offsetof (")) + if (Token::Match(tok, "sizeof|offsetof|decltype (")) tok = tok->next()->link(); // TODO: handle loops, try, etc diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 9af9e2f06..fc2199f9c 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1880,6 +1880,12 @@ private: " sizeof(i+1);\n" "}"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar2("void f() {\n" + " int i;\n" + " if (100 == sizeof(i+1));\n" + "}"); + ASSERT_EQUALS("", errout.str()); } };