https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80122
rpirrera at aitek dot it changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |---
--- Comment #12 from rpirrera at aitek dot it ---
I have found another issue with __builtin_va_arg_pack_len() that happens when
the functions that uses __builtin_va_arg_pack() calls another function that
uses __builtin_va_arg_pack_len(), the argument len is miscalculated as you can
see in the attached example.
This was working in GCC version 4.4.7.
/*************** TESTBUILTIN BEGIN ****************/
static inline __attribute__(( __always_inline__)) int
funA(unsigned int param, ...)
{
return __builtin_va_arg_pack_len();
}
static inline __attribute__(( __always_inline__)) int
funB(unsigned int param, ...)
{
return funA(param, 2, 4, __builtin_va_arg_pack());
}
int
testBuiltin(void)
{
printf(ANSI_BOLD "%s" ANSI_RESET " ... ", __FUNCTION__);
int rc = funB(0,1,2);
if (rc != 4) {
return 1;
}
return 0;
}
Thank you!