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()); } };