Fixed #8518 (Clarify warning for a NULL pointer which is received by a function call parameter.)
This commit is contained in:
parent
31148fdfed
commit
b2343a2d4b
|
@ -572,12 +572,9 @@ void CheckNullPointer::arithmeticError(const Token *tok, const ValueFlow::Value
|
||||||
errmsg = "Pointer arithmetic with NULL pointer.";
|
errmsg = "Pointer arithmetic with NULL pointer.";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<const Token*> callstack;
|
const ErrorPath errorPath = getErrorPath(tok, value, tok && tok->str()[0] == '-' ? "Null pointer subtraction" : "Null pointer arithmetic");
|
||||||
callstack.push_back(tok);
|
|
||||||
if (value && value->condition)
|
|
||||||
callstack.push_back(value->condition);
|
|
||||||
|
|
||||||
reportError(callstack,
|
reportError(errorPath,
|
||||||
(value && value->condition) ? Severity::warning : Severity::error,
|
(value && value->condition) ? Severity::warning : Severity::error,
|
||||||
(value && value->condition) ? "nullPointerArithmeticRedundantCheck" : "nullPointerArithmetic",
|
(value && value->condition) ? "nullPointerArithmeticRedundantCheck" : "nullPointerArithmetic",
|
||||||
errmsg,
|
errmsg,
|
||||||
|
|
|
@ -2586,7 +2586,7 @@ private:
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
" p = s - 20;\n"
|
" p = s - 20;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition '!s' is redundant or there is overflow in pointer subtraction.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is overflow in pointer subtraction.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" s -= 20;\n"
|
" s -= 20;\n"
|
||||||
|
@ -2598,7 +2598,7 @@ private:
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
" s -= 20;\n"
|
" s -= 20;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition '!s' is redundant or there is overflow in pointer subtraction.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is overflow in pointer subtraction.\n", errout.str());
|
||||||
|
|
||||||
check("int* f8() { int *x = NULL; return --x; }");
|
check("int* f8() { int *x = NULL; return --x; }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Overflow in pointer arithmetic, NULL pointer is subtracted.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) Overflow in pointer arithmetic, NULL pointer is subtracted.\n", errout.str());
|
||||||
|
@ -2618,7 +2618,7 @@ private:
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
" char * p = s + 20;\n"
|
" char * p = s + 20;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" char * p = 20 + s;\n"
|
" char * p = 20 + s;\n"
|
||||||
|
@ -2630,7 +2630,7 @@ private:
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
" char * p = 20 + s;\n"
|
" char * p = 20 + s;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" s += 20;\n"
|
" s += 20;\n"
|
||||||
|
@ -2642,7 +2642,7 @@ private:
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
" s += 20;\n"
|
" s += 20;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("int* f7() { int *x = NULL; return ++x; }");
|
check("int* f7() { int *x = NULL; return ++x; }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
||||||
|
|
Loading…
Reference in New Issue