http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51353
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-01-04 00:37:33 UTC --- __builtin_frame_address(0) points to an address on the stack which means at the end of the function, it can be removed. The tricks you are doing require the use of volatile so that the compiler cannot remove it.