$ cat output-block.c int flush_output(void) { return add_block(); } $ gcc -O3 -S output-block.c $ cat output-block.s .file "output-block.c" .text .p2align 4,,15 .globl flush_output .type flush_output, @function flush_output: pushl %ebp movl %esp, %ebp popl %ebp jmp add_block .size flush_output, .-flush_output .ident "GCC: (GNU) 4.1.0 20050315 (experimental)" .section .note.GNU-stack,"",@progbits
The operations on ebp aren't necessary. -- Summary: unnecessary operations in tailcall Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Thomas dot Koenig at online dot de CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20545