[clang] [analyzer] Fix security.VAList false positives with C23 va_start (PR #192024)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Fri May 1 04:41:19 PDT 2026


================
@@ -0,0 +1,16 @@
+// Like the compiler, the static analyzer treats some functions differently if
+// they come from a system header -- for example, it is assumed that system
+// functions do not arbitrarily free() their parameters, and that some bugs
+// found in system headers cannot be fixed by the user and should be
+// suppressed.
+
+#pragma clang system_header
+
+typedef __builtin_va_list va_list;
+
+#define va_start(...)      __builtin_c23_va_start(__VA_ARGS__)
+#define va_end(ap)         __builtin_va_end(ap)
+#define va_arg(ap, type)   __builtin_va_arg(ap, type)
+#define va_copy(dst, src)  __builtin_va_copy(dst, src)
+
+int vprintf(const char *restrict format, va_list arg);
----------------
AaronBallman wrote:

You could use `__restrict` instead and then it will work in C and C++ modes: https://godbolt.org/z/54148f9zW though you would need `extern "C"` in C++ mode to be technically correct.

https://github.com/llvm/llvm-project/pull/192024


More information about the cfe-commits mailing list