s_n type mismatch
See: https://github.com/pure-data/pure-data/pull/673
Quick-n-nasty review:
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.