s_n type mismatch
Those casts essentially mean, "get me the t_signal member field s_n which I assert through my cast is a pointer-sized int." That's wrong-- s_n is sizeof(int), not sizeof(t_int).
Quick-n-dirty solution: One needs to cast to the appropriate type (here
int) before using data from the slot where we initially stored s_n. Luckily s_n is required by the interface to be an
int so all of those performance routines can cast to
int to fix the problem.
I'm not completely sure that avoids any undefined behavior wrt variadic arg promotion. And yes, my solution still passes around whatever garbage is in the higher bits of the variadic arg slot where s_n is stored. But setting and retrieving using an
int cast should ensure we never touch any of those higher bits.