------- Comment #1 from rguenth at gcc dot gnu dot org 2008-01-26 18:50 ------- We seem to use local calling conventions for emitting the body of something, but at the call site we pass arguments via the stack.
P1 until we know more about this. Reduced testcase: extern void abort (void); static void something(); int main() { something(-1); } static void something(int i) { if (i != -1) abort (); } The asm shows it: something: subl $12, %esp cmpl $-1, %eax je .L3 call abort .L3: addl $12, %esp ret but: main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ecx subl $8, %esp movl $-1, (%esp) call something -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|c |target Ever Confirmed|0 |1 Keywords| |wrong-code Priority|P3 |P1 Last reconfirmed|0000-00-00 00:00:00 |2008-01-26 18:50:39 date| | Target Milestone|--- |4.3.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34982