http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59193
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |INVALID --- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Max TenEyck Woodbury from comment #8) > > Re: Jakub Jelinek > > You admit that different 'tree codes' are generated, so there is a difference > between the two sequences. You further admit that -O0 does do some > optimization, otherwise the machine code emitted would store and discard > the temporary value because that is what the language standard says should > happen. While this is quite trivial in practice, it shows that you place > your opinion over the exact semantics called for by the standard and lack > the ability to see that. That is distinctly disturbing. The language semantics != middle-end semantics. There is no temporary variable if the value is unused and will never be as it is "expanded" to ignore it if the resulting value is unused. This is the middle-end semantics of these tree codes. If the front-end wants the temporary variable always then it needs to do the assignment. The language semantics does not require a temporary variable to hold the value if the value is unused so the middle-end semantics of these tree codes fit the bill.