https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108560
Bug ID: 108560 Summary: builtin_va_arg_pack_len is documented to return size_t, but actually returns int Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jens.seifert at de dot ibm.com Target Milestone: --- #include <stdio.h> bool test(const char *fmt, size_t numTokens, ...) { return __builtin_va_arg_pack_len() != numTokens; } Compiled with -Wsign-compare results in: <source>: In function 'bool test(const char*, size_t, ...)': <source>:5:40: warning: comparison of integer expressions of different signedness: 'int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare] 5 | return __builtin_va_arg_pack_len() != numTokens; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ <source>:5:37: error: invalid use of '__builtin_va_arg_pack_len ()' 5 | return __builtin_va_arg_pack_len() != numTokens; | ~~~~~~~~~~~~~~~~~~~~~~~~~^~ Compiler returned: 1 Documentation: https://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html indicates a size_t return type Built-in Function: size_t __builtin_va_arg_pack_len ()