I work for a company that sells products in the real world. It is our livelihood. We have developed a new line that must behave like our legacy products only in a smaller physical package. The PSoC 3 was chosen by the hardware developer. The hardware developer has a one sub-routine test program that verifies the hardware. My job is to write the product program that interfaces to customer machines and their programs.
Much of the code has been re-used and has been working across 3 different microcontrollers and 3 different compilers.
I used the PSoC 3 Developer Kit (CY8CKIT-030) to write my program while the hardware designer worked on the first pass hardware. I began using PSoC Creator 1.0 and eventually both the hardware developer and I got on the same page using 2.0 and then 2.2. I integreted his code with mine and we proceeded to release prototypes to our customers for evaluation. We are mid stream in the development.
The hardware engineer upgraded to PSoC 3.0 and I attempted to do the same. To be on the safe side, I do my development on a laptop but keep a desktop computer in sync with the laptop in the event that the laptop crashes. When I tried to compile the program that compiled with no errors or warnings in 2.2, there were 2 days worth of work in clearing up the warnings and ultimately, the program ceased to work in our product.
That you must recast a stack variable as a const on a stack is the least of my worries at this time. The point is, Cypress and their partner Keil have collapsed legacy code AT A RANDOM POINT IN TIME WITH NO FOREWARNING.
The changes to make the warnings stop increased the code slightly, so the argument that after all this time, compilers need to be produce tighter, more efficient code doesn't apply to PSoC 3.0 and Keil's latest version therein.