Fixed #3901 (false positive: (error) Uninitialized variable: temp)
This commit is contained in:
parent
ce5c38f52c
commit
974225626d
|
@ -4466,7 +4466,10 @@ void Tokenizer::simplifyCasts()
|
||||||
// *((char *)a + 1) = 0;
|
// *((char *)a + 1) = 0;
|
||||||
// #3596 : remove cast when casting a function pointer:
|
// #3596 : remove cast when casting a function pointer:
|
||||||
// (*(void (*)(char *))fp)(x);
|
// (*(void (*)(char *))fp)(x);
|
||||||
if (!tok->isName() && Token::simpleMatch(tok->next(), "* (") && !Token::Match(tok->linkAt(2), ") %var%")) {
|
if (!tok->isName() &&
|
||||||
|
Token::simpleMatch(tok->next(), "* (") &&
|
||||||
|
!Token::Match(tok->linkAt(2), ") %var%") &&
|
||||||
|
!Token::simpleMatch(tok->linkAt(2), ") &")) {
|
||||||
tok = tok->linkAt(2);
|
tok = tok->linkAt(2);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -4483,6 +4486,12 @@ void Tokenizer::simplifyCasts()
|
||||||
// Remove cast..
|
// Remove cast..
|
||||||
Token::eraseTokens(tok, tok->next()->link()->next());
|
Token::eraseTokens(tok, tok->next()->link()->next());
|
||||||
|
|
||||||
|
// Remove '* &'
|
||||||
|
if (Token::simpleMatch(tok, "* &")) {
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteThis();
|
||||||
|
}
|
||||||
|
|
||||||
if (tok->str() == ")" && tok->link()->previous()) {
|
if (tok->str() == ")" && tok->link()->previous()) {
|
||||||
// If there was another cast before this, go back
|
// If there was another cast before this, go back
|
||||||
// there to check it also. e.g. "(int)(char)x"
|
// there to check it also. e.g. "(int)(char)x"
|
||||||
|
|
|
@ -78,6 +78,7 @@ private:
|
||||||
TEST_CASE(removeCast8);
|
TEST_CASE(removeCast8);
|
||||||
TEST_CASE(removeCast9);
|
TEST_CASE(removeCast9);
|
||||||
TEST_CASE(removeCast10);
|
TEST_CASE(removeCast10);
|
||||||
|
TEST_CASE(removeCast11);
|
||||||
|
|
||||||
TEST_CASE(inlineasm);
|
TEST_CASE(inlineasm);
|
||||||
|
|
||||||
|
@ -788,6 +789,10 @@ private:
|
||||||
ASSERT_EQUALS("; ( * f ) ( p ) ;", tokenizeAndStringify("; (*(void (*)(char *))f)(p);", true));
|
ASSERT_EQUALS("; ( * f ) ( p ) ;", tokenizeAndStringify("; (*(void (*)(char *))f)(p);", true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeCast11() {
|
||||||
|
ASSERT_EQUALS("; x = 0 ;", tokenizeAndStringify("; *(int *)&x = 0;", true));
|
||||||
|
}
|
||||||
|
|
||||||
void inlineasm() {
|
void inlineasm() {
|
||||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("asm { mov ax,bx };"));
|
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("asm { mov ax,bx };"));
|
||||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("_asm { mov ax,bx };"));
|
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("_asm { mov ax,bx };"));
|
||||||
|
|
Loading…
Reference in New Issue