Index: clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp =================================================================== --- clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp +++ clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp @@ -90,7 +90,7 @@ callExpr(callee(namedDecl(hasAnyName( utils::options::parseListPair(BuiltinMemSet, MemSetNames)))), ArgChecker(unless(isTriviallyDefaultConstructible()), - expr(integerLiteral(equals(0))))) + expr(integerLiteral()))) .bind("lazyConstruct"), this); Finder->addMatcher( Index: docs/ReleaseNotes.rst =================================================================== --- docs/ReleaseNotes.rst +++ docs/ReleaseNotes.rst @@ -198,6 +198,9 @@ ` to simplify expressions using DeMorgan's Theorem. +- Made :doc:`cert-oop57-cpp ` more sensitive + by checking for non-zero integer literal memset arguments as well. + Removed checks ^^^^^^^^^^^^^^ Index: test/clang-tidy/checkers/cert-oop57-cpp.cpp =================================================================== --- test/clang-tidy/checkers/cert-oop57-cpp.cpp +++ test/clang-tidy/checkers/cert-oop57-cpp.cpp @@ -88,3 +88,10 @@ mymemcmp(&Data, &Other, sizeof(Data)); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: consider using comparison operators instead of calling 'mymemcmp' } + +void nonNullSetValue() { + NonTrivial Data; + // Check non-null-valued second argument. + std::memset(&Data, 1, sizeof(Data)); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: calling 'memset' on a non-trivially default constructible class is undefined +}