http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31528
--- Comment #11 from Joerg Wunsch <j at uriah dot heep.sax.de> 2010-11-11 10:59:42 UTC --- (In reply to comment #10) > Can you, please, test if current mainline behave more resonably? Well, I had to fix bug #46426 first ... Yes, that looks good now. Compiling the original testcase with just -Os (no -fno-inline involved) results in: .type putch, @function putch: /* prologue: function */ /* frame size = 0 */ /* stack size = 0 */ .L__stack_usage = 0 .L2: sbis 43-0x20,5 rjmp .L2 out 44-0x20,r24 /* epilogue start */ ret .size putch, .-putch .global main .type main, @function main: /* prologue: function */ /* frame size = 0 */ /* stack size = 0 */ .L__stack_usage = 0 ldi r24,lo8(0) rcall putch ldi r24,lo8(1) rcall putch ldi r24,lo8(2) rcall putch ldi r24,lo8(3) rcall putch ldi r24,lo8(4) rcall putch ldi r24,lo8(5) rcall putch ldi r24,lo8(6) rcall putch ldi r24,lo8(7) rcall putch ldi r24,lo8(8) rcall putch ldi r24,lo8(9) rcall putch ldi r24,lo8(0) ldi r25,hi8(0) /* epilogue start */ ret .size main, .-main That's the same what has originally been compiled when applying -fno-inline. It does not solve the issue from bug #30908 though. The version compiled with -DNOINLINE there is still 4 bytes smaller than the default version (which has already been the case in GCC 4.3.4). However, both versions are now already considerably smaller than they used to be in 4.3.4 (40/44 bytes vs. 52/56 bytes in 4.3.4).