https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123399
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For normal ... arguments we add the extra cast though:
#ifdef __SIZEOF_INT128__
typedef __int128 T;
#else
typedef long long T;
#endif
T v = 0;
void baz (int, ...);
void
bar ()
{
baz (0, (T) "");
}
void
foo ()
{
__sync_val_compare_and_swap (&v, 0, (T) "");
}
has
baz (0, (T) (long int) "")
but
(void) (__int128) __sync_val_compare_and_swap_16 ((volatile void *) &v, 0,
(__int128 unsigned) (const char *) "")