http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56807
--- Comment #6 from Andrew Church <achurch+gcc at achurch dot org> --- Still broken for me, sorry. Using SVN r205727 with the patch, the assembly now looks like: 00000000 <_bar>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: 50 push %eax 7: b8 1c 10 00 00 mov $0x101c,%eax c: e8 00 00 00 00 call 11 <_bar+0x11> d: DISP32 ___chkstk_ms 11: 29 c4 sub %eax,%esp 13: 8b 84 24 e4 ef ff ff mov -0x101c(%esp),%eax so it's using the stack pointer but the offset is in the wrong direction. Should "0 - allocate" be just "allocate" in the plus_constant() calls?