Fixed #4659 (portability: address value / integer false positive)
This commit is contained in:
parent
1e66e0b931
commit
a4a2f78a7a
|
@ -68,7 +68,7 @@ void Check64BitPortability::pointerassignment()
|
|||
if (Token::Match(tok, "return %var%|%num% [;+]") && !Token::simpleMatch(tok, "return 0 ;")) {
|
||||
enum { NO, INT, PTR, PTRDIFF } type = NO;
|
||||
for (const Token *tok2 = tok->next(); tok2; tok2 = tok2->next()) {
|
||||
if ((type == NO || type == INT) && isaddr(tok2->variable()))
|
||||
if ((type == NO || type == INT) && Token::Match(tok2, "%var% [+;]") && isaddr(tok2->variable()))
|
||||
type = PTR;
|
||||
else if (type == NO && (tok2->isNumber() || isint(tok2->variable())))
|
||||
type = INT;
|
||||
|
|
|
@ -95,6 +95,11 @@ private:
|
|||
" *p = 0;\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:3]: (portability) Assigning an integer to a pointer is not portable.\n", errout.str());
|
||||
|
||||
check("int f(const char *p) {\n" // #4659
|
||||
" return 6 + p[2] * 256;\n"
|
||||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void structmember() {
|
||||
|
|
Loading…
Reference in New Issue