Tokenizer: More specific bail outs in simplifyKnownVariables
This commit is contained in:
parent
b881718d9f
commit
cd94fa89e0
|
@ -6029,6 +6029,19 @@ bool Tokenizer::simplifyKnownVariables()
|
|||
if (Token::Match(tok3->next(), ". %var% ("))
|
||||
break;
|
||||
|
||||
// suppress debug-warning when assignment
|
||||
if (Token::simpleMatch(tok3->next(), "="))
|
||||
break;
|
||||
|
||||
// taking address of variable..
|
||||
if (Token::Match(tok3->tokAt(-2), "return|= & %var% ;"))
|
||||
break;
|
||||
|
||||
// parameter in function call..
|
||||
if (Token::Match(tok3->tokAt(-2), "%var% ( %var% ,|)") ||
|
||||
Token::Match(tok3->previous(), ", %var% ,|)"))
|
||||
break;
|
||||
|
||||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok3->linenr();
|
||||
|
|
|
@ -38,7 +38,9 @@ private:
|
|||
void check(const char code[])
|
||||
{
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer;
|
||||
Settings settings;
|
||||
settings.debugwarnings = true;
|
||||
Tokenizer tokenizer(&settings, 0);
|
||||
std::istringstream istr(code);
|
||||
tokenizer.tokenize(istr, "test.cpp");
|
||||
tokenizer.simplifyTokenList();
|
||||
|
@ -53,7 +55,6 @@ private:
|
|||
errout.str("");
|
||||
|
||||
// Check auto variables
|
||||
Settings settings;
|
||||
CheckAutoVariables checkAutoVariables(&tokenizer, &settings, this);
|
||||
checkAutoVariables.autoVariables();
|
||||
checkAutoVariables.returnPointerToLocalArray();
|
||||
|
|
|
@ -123,6 +123,7 @@ private:
|
|||
TEST_CASE(simplifyKnownVariables30);
|
||||
TEST_CASE(simplifyKnownVariables31);
|
||||
TEST_CASE(simplifyKnownVariables32); // const
|
||||
TEST_CASE(simplifyKnownVariablesBailOutAssign);
|
||||
TEST_CASE(simplifyKnownVariablesBailOutFor1);
|
||||
TEST_CASE(simplifyKnownVariablesBailOutFor2);
|
||||
TEST_CASE(simplifyKnownVariablesBailOutMemberFunction);
|
||||
|
@ -299,8 +300,12 @@ private:
|
|||
|
||||
std::string tokenizeAndStringify(const char code[], bool simplify = false)
|
||||
{
|
||||
errout.str("");
|
||||
|
||||
// tokenize..
|
||||
Tokenizer tokenizer(0, this);
|
||||
Settings settings;
|
||||
settings.debugwarnings = true;
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
std::istringstream istr(code);
|
||||
tokenizer.tokenize(istr, "test.cpp");
|
||||
if (simplify)
|
||||
|
@ -1871,6 +1876,21 @@ private:
|
|||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
||||
}
|
||||
|
||||
void simplifyKnownVariablesBailOutAssign()
|
||||
{
|
||||
const char code[] = "int foo() {\n"
|
||||
" int i; i = 0;\n"
|
||||
" if (x) { i = 10; }\n"
|
||||
" return i;\n"
|
||||
"}\n";
|
||||
const char expected[] = "int foo ( ) {\n"
|
||||
"int i ; i = 0 ;\n"
|
||||
"if ( x ) { i = 10 ; }\n"
|
||||
"return i ;\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
||||
}
|
||||
|
||||
void simplifyKnownVariablesBailOutFor1()
|
||||
{
|
||||
const char code[] = "void foo() {\n"
|
||||
|
|
Loading…
Reference in New Issue