https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69843
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- For struct sockaddr; struct sockaddr *foo (void); struct __attribute__ ((may_alias)) sockaddr { }; struct sockaddr * foo (void) { return (struct sockaddr *) 0; } we reject it in C and ICE in C++: internal compiler error: canonical types differ for identical types sockaddr* and sockaddr*