https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65686
--- Comment #6 from Dmitry G. Dyachenko <dimhen at gmail dot com> --- (In reply to Richard Biener from comment #5) > > Where does this obfuscated 'return *(e->pu)' come from? If I remove aggregate then there are no warning. i.e. this code produce no warning mytype f(mytype *pu) { mytype x; if(&x != pu) __builtin_memcpy(&x, pu, sizeof(unsigned)); return x; }