https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
Andy Lutomirski <luto at mit dot edu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |luto at mit dot edu --- Comment #19 from Andy Lutomirski <luto at mit dot edu> --- I don't think the fix is correct. This works: gcc -mno-sse -mpreferred-stack-boundary=3 ... This does not: gcc -mno-sse -mpreferred-stack-boundary=3 -mincoming-stack-boundary=3 ... This makes no sense, since they should be equivalent. Also, I find the docs to be unclear as to what different values of the incoming and preferred stack boundaries mean. Finally, why is -mno-sse required in order to set a low stack boundary? Couldn't gcc figure out that the existence of a stack variable (SSE, alignas, __attribute__((aligned(32))), etc) should force dynamic stack alignment? In fact, that should be necessary, and already appears to work, for __attribute__((aligned(32))), as gcc generates correct code for this: typedef int __attribute__((aligned(32))) int_aligned_32; extern void func2(int_aligned_32 *x); void func(void) { int_aligned_32 x; func2(&x); }