Fixed #2296 (Tokenizer: simplifyKnownVariable doesn't simplify pointer properly 'delete [] p;')
This commit is contained in:
parent
98e77bda10
commit
79e52a8c45
|
@ -6504,6 +6504,17 @@ bool Tokenizer::simplifyKnownVariables()
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete pointer alias
|
||||||
|
if (pointeralias && tok3->str() == "delete" &&
|
||||||
|
(Token::Match(tok3, "delete %varid% ;", varid) ||
|
||||||
|
Token::Match(tok3, "delete [ ] %varid%", varid)))
|
||||||
|
{
|
||||||
|
tok3 = (tok3->strAt(1) == "[") ? tok3->tokAt(3) : tok3->next();
|
||||||
|
tok3->str(value);
|
||||||
|
tok3->varId(valueVarId);
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Variable is used in function call..
|
// Variable is used in function call..
|
||||||
if (Token::Match(tok3, ("%var% ( " + structname + " %varid% ,").c_str(), varid))
|
if (Token::Match(tok3, ("%var% ( " + structname + " %varid% ,").c_str(), varid))
|
||||||
{
|
{
|
||||||
|
|
|
@ -128,6 +128,7 @@ private:
|
||||||
TEST_CASE(simplifyKnownVariables36); // ticket #2304 - known value for strcpy parameter
|
TEST_CASE(simplifyKnownVariables36); // ticket #2304 - known value for strcpy parameter
|
||||||
TEST_CASE(simplifyKnownVariables37); // ticket #2398 - false positive caused by no simplification in for loop
|
TEST_CASE(simplifyKnownVariables37); // ticket #2398 - false positive caused by no simplification in for loop
|
||||||
TEST_CASE(simplifyKnownVariables38); // ticket #2399 - simplify conditions
|
TEST_CASE(simplifyKnownVariables38); // ticket #2399 - simplify conditions
|
||||||
|
TEST_CASE(simplifyKnownVariables39);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutAssign);
|
TEST_CASE(simplifyKnownVariablesBailOutAssign);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutFor1);
|
TEST_CASE(simplifyKnownVariablesBailOutFor1);
|
||||||
TEST_CASE(simplifyKnownVariablesBailOutFor2);
|
TEST_CASE(simplifyKnownVariablesBailOutFor2);
|
||||||
|
@ -1965,6 +1966,27 @@ private:
|
||||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simplifyKnownVariables39()
|
||||||
|
{
|
||||||
|
// Ticket #2296 - simplify pointer alias 'delete p;'
|
||||||
|
{
|
||||||
|
const char code[] = "void f() {\n"
|
||||||
|
" int *x;\n"
|
||||||
|
" int *y = x;\n"
|
||||||
|
" delete y;\n"
|
||||||
|
"}";
|
||||||
|
ASSERT_EQUALS("void f ( ) {\nint * x ;\n\ndelete x ;\n}", tokenizeAndStringify(code, true));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const char code[] = "void f() {\n"
|
||||||
|
" int *x;\n"
|
||||||
|
" int *y = x;\n"
|
||||||
|
" delete [] y;\n"
|
||||||
|
"}";
|
||||||
|
ASSERT_EQUALS("void f ( ) {\nint * x ;\n\ndelete [ ] x ;\n}", tokenizeAndStringify(code, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void simplifyKnownVariablesBailOutAssign()
|
void simplifyKnownVariablesBailOutAssign()
|
||||||
{
|
{
|
||||||
const char code[] = "int foo() {\n"
|
const char code[] = "int foo() {\n"
|
||||||
|
|
Loading…
Reference in New Issue