Fixed #1476 (false positive: Uninitialized variable)
This commit is contained in:
parent
235404077f
commit
12c45a1aba
|
@ -1257,6 +1257,12 @@ bool Tokenizer::tokenize(std::istream &code, const char FileName[], const std::s
|
||||||
// Handle templates..
|
// Handle templates..
|
||||||
simplifyTemplates();
|
simplifyTemplates();
|
||||||
|
|
||||||
|
// Simplify templates.. sometimes the "simplifyTemplates" fail and
|
||||||
|
// then unsimplified function calls etc remain. These have the
|
||||||
|
// "wrong" syntax. So this function will just fix so that the
|
||||||
|
// syntax is corrected.
|
||||||
|
simplifyTemplates2();
|
||||||
|
|
||||||
// Simplify the operator "?:"
|
// Simplify the operator "?:"
|
||||||
simplifyConditionOperator();
|
simplifyConditionOperator();
|
||||||
|
|
||||||
|
@ -1910,6 +1916,25 @@ void Tokenizer::simplifyTemplates()
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Tokenizer::simplifyTemplates2()
|
||||||
|
{
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (tok->str() == "(")
|
||||||
|
tok = tok->link();
|
||||||
|
|
||||||
|
else if (Token::Match(tok, "; %type% < %type% > ("))
|
||||||
|
{
|
||||||
|
tok = tok->next();
|
||||||
|
tok->str(tok->str() + "<" + tok->strAt(2) + ">");
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
std::string Tokenizer::getNameForFunctionParams(const Token *start)
|
std::string Tokenizer::getNameForFunctionParams(const Token *start)
|
||||||
{
|
{
|
||||||
if (start->next() == start->link())
|
if (start->next() == start->link())
|
||||||
|
|
|
@ -324,6 +324,13 @@ private:
|
||||||
*/
|
*/
|
||||||
void simplifyTemplates();
|
void simplifyTemplates();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used after simplifyTemplates to perform a little cleanup.
|
||||||
|
* Sometimes the simplifyTemplates isn't fully successful and then
|
||||||
|
* there are function calls etc with "wrong" syntax.
|
||||||
|
*/
|
||||||
|
void simplifyTemplates2();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simplify e.g. 'atol("0")' into '0'
|
* Simplify e.g. 'atol("0")' into '0'
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -97,6 +97,7 @@ private:
|
||||||
TEST_CASE(template17);
|
TEST_CASE(template17);
|
||||||
TEST_CASE(template18);
|
TEST_CASE(template18);
|
||||||
TEST_CASE(template19);
|
TEST_CASE(template19);
|
||||||
|
TEST_CASE(template_unhandled);
|
||||||
TEST_CASE(template_default_parameter);
|
TEST_CASE(template_default_parameter);
|
||||||
TEST_CASE(template_default_type);
|
TEST_CASE(template_default_type);
|
||||||
TEST_CASE(template_typename);
|
TEST_CASE(template_typename);
|
||||||
|
@ -1539,6 +1540,12 @@ private:
|
||||||
ASSERT_EQUALS(expected, sizeof_(code));
|
ASSERT_EQUALS(expected, sizeof_(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void template_unhandled()
|
||||||
|
{
|
||||||
|
// An unhandled template usage should be simplified..
|
||||||
|
ASSERT_EQUALS("; x<int> ( ) ;", sizeof_(";x<int>();"));
|
||||||
|
}
|
||||||
|
|
||||||
void template_default_parameter()
|
void template_default_parameter()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue