------- Comment #4 from rguenth at gcc dot gnu dot org 2007-11-16 11:03 ------- We have wrong types in the IL before forwprop3:
struct sockaddr_in * saddr.3; struct in_addr * D.1627; unsigned char * addr; unsigned char D.1580; ... <L13>:; saddr.3_22 = (struct sockaddr_in *) D.1577_5; D.1627_23 = &saddr.3_22->sin_addr; addr_4 = D.1627_23; D.1580_9 = *addr_4; the conversion between D.1627_23 and addr_4 is not useless. Reduced testcase: struct sockaddr_in { int sin_addr; }; static void ConvertAddr (struct sockaddr_in *saddr, void **addr) { *addr = (void *) &saddr->sin_addr; } unsigned char EnableLocalHost (struct sockaddr_in *ifa_addr) { unsigned char * addr; ConvertAddr(ifa_addr, (void **)&addr); return addr[0]; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34113