[Bug rtl-optimization/70782] zero-initialized long returned by value generates useless stores/loads to the stack

jhaberman at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Apr 25 04:35:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70782

Josh Haberman <jhaberman at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|zero-initialized union      |zero-initialized long
                   |returned by value generates |returned by value generates
                   |useless stores/loads to the |useless stores/loads to the
                   |stack                       |stack

--- Comment #1 from Josh Haberman <jhaberman at gmail dot com> ---
I just realized that the union has nothing to do with it.  I get exactly the
same results if the function returns a long:

--

#include <string.h>

long f(const void *p, int type) {
  long v;
  memset(&v, 0, 8);
  if (type == 1) {
    memcpy(&v, p, 1);
  } else if (type <= 5) {
    memcpy(&v, p, 4);
  } else if (type <= 8) {
    memcpy(&v, p, 8);
  }
  return v;
}

--

I've retitled the bug accordingly.


More information about the Gcc-bugs mailing list