http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59927
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reduced testcase: typedef unsigned int (__attribute__ ((ms_abi)) *F) (long); void foo (F f) { f (0); } or even: extern void bar (int) __attribute__ ((ms_abi)); void foo (void) { bar (0); } Why do you need ACCUMULATE_OUTGOING_ARGS in the non-ms_abi caller of a ms_abi function though? There is no SEH involved there... I see the subsequent ICE is about the stack pointer delta not being sufficiently aligned, but it is unclear if it is because of i386.c bug in the ms_abi support, or calls.c bug. Changing ACCUMULATE_OUTGOING_ARGS on the fly if we notice that the current function calls or might call a ms_abi function would be both weird and not sure where the target would have a chance to see the calls to decide that prior to expansion (and, changing that while already in expansion is too late).