[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