Do not warn for array arguments that are free'd, since they decay to pointers.
This commit is contained in:
parent
bca27bf7d2
commit
e7b6920cf4
|
@ -60,7 +60,7 @@ static bool isArrayArg(const Token *tok)
|
||||||
static bool isArrayVar(const Token *tok)
|
static bool isArrayVar(const Token *tok)
|
||||||
{
|
{
|
||||||
const Variable *var = tok->variable();
|
const Variable *var = tok->variable();
|
||||||
return (var && var->isArray());
|
return (var && var->isArray() && !var->isArgument());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isRefPtrArg(const Token *tok)
|
static bool isRefPtrArg(const Token *tok)
|
||||||
|
|
|
@ -79,6 +79,7 @@ private:
|
||||||
TEST_CASE(testautovar_extern);
|
TEST_CASE(testautovar_extern);
|
||||||
TEST_CASE(testautovar_reassigned);
|
TEST_CASE(testautovar_reassigned);
|
||||||
TEST_CASE(testinvaliddealloc);
|
TEST_CASE(testinvaliddealloc);
|
||||||
|
TEST_CASE(testinvaliddealloc_input); // Ticket #10600
|
||||||
TEST_CASE(testinvaliddealloc_string);
|
TEST_CASE(testinvaliddealloc_string);
|
||||||
TEST_CASE(testinvaliddealloc_C);
|
TEST_CASE(testinvaliddealloc_C);
|
||||||
TEST_CASE(testassign1); // Ticket #1819
|
TEST_CASE(testassign1); // Ticket #1819
|
||||||
|
@ -764,6 +765,33 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testinvaliddealloc_input() {
|
||||||
|
// #10600
|
||||||
|
check("void f(int* a[]) {\n"
|
||||||
|
" free(a);\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void f(int a[]) {\n"
|
||||||
|
" free(a);\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void f(int* a[]) {\n"
|
||||||
|
" int * p = *a;\n"
|
||||||
|
" free(p);\n"
|
||||||
|
" int ** q = a;\n"
|
||||||
|
" free(q);\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void f(int a[]) {\n"
|
||||||
|
" int * p = a;\n"
|
||||||
|
" free(p);\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void testinvaliddealloc_string() {
|
void testinvaliddealloc_string() {
|
||||||
// #7341
|
// #7341
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
|
|
Loading…
Reference in New Issue