Skip to content
Merged
3 changes: 2 additions & 1 deletion lib/checkclass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1361,7 +1361,8 @@ void CheckClass::checkMemset()
if (numIndirToVariableType == 1)
type = var->typeScope();

if (!type && !var->isPointer() && mSettings->library.detectContainerOrIterator(var->typeStartToken())) {
if (!type && !var->isPointer() && !Token::simpleMatch(var->typeStartToken(), "std :: array") &&
mSettings->library.detectContainerOrIterator(var->typeStartToken())) {
memsetError(tok, tok->str(), var->getTypeName(), {}, /*isContainer*/ true);
}
}
Expand Down
6 changes: 6 additions & 0 deletions test/testclass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3145,6 +3145,12 @@ class TestClass : public TestFixture {
" f<P>(Dst, Src, 2);\n"
"}\n", s);
ASSERT_EQUALS("", errout.str());

checkNoMemset("void f() {\n"
" std::array<char, 4> a;\n"
" std::memset(&a, 0, 4);\n"
"}\n", s);
ASSERT_EQUALS("", errout.str());
}

void memsetOnInvalid() { // Ticket #5425
Expand Down