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

Balázs Benics via cfe-commits cfe-commits at lists.llvm.org
Fri May 1 04:33:43 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);
----------------
steakhal wrote:

Can we drop this restrict and have the tests pass? I think this is the only thing that would prevent the use of this header from C++ code.

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


More information about the cfe-commits mailing list