diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 65b74b2ac..66c6fda58 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1916,7 +1916,7 @@ int CheckUninitVar::isFunctionParUsage(const Token *vartok, bool pointer, Alloc return alloc == NO_ALLOC; } else { const bool isnullbad = _settings->library.isnullargbad(start->previous(), argumentNumber + 1); - if (!address && isnullbad && alloc == NO_ALLOC) + if (pointer && !address && isnullbad && alloc == NO_ALLOC) return true; const bool isuninitbad = _settings->library.isuninitargbad(start->previous(), argumentNumber + 1); if (alloc != NO_ALLOC) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index af3eed17b..f2a3dff4a 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1012,6 +1012,13 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + // TODO: write a proper testcase, this can not be compiled + checkUninitVar2("struct X { int x; };\n" + "void f() {\n" + " X var;\n" + " memset(var, 0, sizeof(var));\n" + "}"); + ASSERT_EQUALS("", errout.str()); }