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

Reply via email to