[clang] [analyzer] Ignore nonstandard function named 'memset' (PR #229119)
Donát Nagy via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 5 13:50:21 PDT 2026
================
@@ -2938,6 +2938,11 @@ void CStringChecker::evalMemset(CheckerContext &C,
SVal SizeVal = C.getSVal(Size.Expression);
QualType SizeTy = Size.Expression->getType();
+ // Avoid assertion failure in the corner case when we see a function named
+ // 'memset' with a nonstandard declaration.
+ if (!SizeTy->isUnsignedIntegerType())
----------------
NagyDonat wrote:
> In your test SizeTy is still an integer type. I think your guard only works because it happens to be a signed integer type. If the parameter is const unsigned & your check no longer catches it.
You were right, and I should've tested it with a `const unsigned &`.
> (Expressions of reference type simply don't exist. From the point of view of the typechecker, the expression already refers to the glvalue behind the reference.)
Good to know – I was not aware of this pitfall :sweat_smile:
> But as a quick fix you can also check `Size.Expression->isPRValue()`. This should be perfectly fine too.
I did so in https://github.com/llvm/llvm-project/pull/229119/commits/535eff24f7393be2e5546928f8e3905abab7a4cb.
https://github.com/llvm/llvm-project/pull/229119
More information about the cfe-commits
mailing list