On Wed, Oct 29, 2025 at 06:01:10PM +0000, Joseph Myers wrote: > On Wed, 15 Oct 2025, Osama Abdelkader wrote: > > > Passing a va_list to a variadic function like printf() instead of its > > v-variant (vprintf()) is a common programming error that can lead to > > undefined behavior. This adds a warning to detect such cases. > > > > The warning uses a multi-tiered detection approach: > > 1. First tries the canonical is_va_list_type() function > > 2. Falls back to exact name matching for typedef'd va_list from stdarg.h > > 3. Handles array-to-pointer decay by checking the pointed-to type > > 4. Uses exact string comparison against known system va_list type names > > to avoid false positives with user-defined types > > > > The warning message is intentionally generic to work with any function > > that has a format attribute, whether standard library functions or > > user-defined functions. > > > > PR c/61898 > > gcc/c-family/ChangeLog: > > > > * c-format.cc: Include tree-sra.h for is_va_list_type. > > (check_format_info): Add detection and warning for va_list > > arguments passed to variadic functions. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.dg/format/pr61898.c: New test. > > This is OK. (I suspect we may end up making further refinements to the > logic in future.) > > -- > Joseph S. Myers > [email protected] >
Thanks Joseph for your review. BR, Osama
