From 789665dadf96a2b7ecc3a6acdf09ee0f99215fdc Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sat, 31 Jan 2015 13:21:22 +0100 Subject: [PATCH] Fixed #6455: Show uninitvar even for const variables --- lib/checkuninitvar.cpp | 4 ++-- test/testuninitvar.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 99a23e583..0e8d07fb7 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -411,7 +411,7 @@ private: // Variable declaration.. if (Token::Match(&tok, "%var% [[;]")) { const Variable* var2 = tok.variable(); - if (var2 && var2->nameToken() == &tok && !var2->isStatic() && !var2->isExtern() && !var2->isConst() && !Token::simpleMatch(tok.linkAt(1), "] [")) { + if (var2 && var2->nameToken() == &tok && !var2->isStatic() && !var2->isExtern() && !Token::simpleMatch(tok.linkAt(1), "] [")) { if (tok.linkAt(1)) { // array const Token* endtok = tok.next(); while (endtok->link()) @@ -1058,7 +1058,7 @@ void CheckUninitVar::checkScope(const Scope* scope) { for (std::list::const_iterator i = scope->varlist.begin(); i != scope->varlist.end(); ++i) { if ((_tokenizer->isCPP() && i->type() && !i->isPointer() && i->type()->needInitialization != Type::True) || - i->isStatic() || i->isExtern() || i->isConst() || i->isArray() || i->isReference()) + i->isStatic() || i->isExtern() || i->isArray() || i->isReference()) continue; // don't warn for try/catch exception variable diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index fc3a10770..8bedbcf06 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -155,6 +155,13 @@ private: "}"); ASSERT_EQUALS("[test.cpp:3]: (error) Uninitialized variable: a\n", errout.str()); + // Ticket #6455 - some compilers allow const variables to be uninitialized + checkUninitVar("void foo() {\n" + " const int a;\n" + " b = c - a;\n" + "}"); + ASSERT_EQUALS("[test.cpp:3]: (error) Uninitialized variable: a\n", errout.str()); + checkUninitVar("void foo() {\n" " int *p;\n" " realloc(p,10);\n"