a couple months ago I posted an information about gcc 4.4.2 on Linux. The main advantage of new compiler version was smaller code, but the benefits were not very huge.
Today I checked pretty new gcc 4.5.0, and compiled my C++ program, the results are as follows:
gcc 4.3.3 "“ 52708 bytes, SRAM 964 bytes
gcc 4.4.2 "“ 46528 bytes, SRAM 858 bytes
gcc 4.5.0 "“ 42708 bytes, SRAM 858 bytes.
So my code is now 19% smaller than the code produced by the newest WinAVR. I quickly checked how it works, and it seems to work without any problems. Because tested application is pretty large, I can assume that at least there is no any major issues with tested compiler version.
There is still some space for optimization, because to compile my application I've used the same compiler and linker parameters, whereas gcc 4.5 has some more options, so it can possibly produce even smaller code.
Of course gcc 4.5 suffers from the same disease as gcc 4.3.x "“ constant strings in FLASH are not merged, and VTABLES are still copied to SRAM, wasting a lot of memory.