Index: compiler-rt/trunk/test/msan/Linux/sendmsg.cc =================================================================== --- compiler-rt/trunk/test/msan/Linux/sendmsg.cc +++ compiler-rt/trunk/test/msan/Linux/sendmsg.cc @@ -33,17 +33,31 @@ char buf[kBufSize] = {0}; pthread_t client_thread; struct sockaddr_in serveraddr; - - sockfd = socket(AF_INET, SOCK_DGRAM, 0); + struct sockaddr_in6 serveraddr6; memset(&serveraddr, 0, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); serveraddr.sin_port = 0; - - bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)); + struct sockaddr *addr = (struct sockaddr *)&serveraddr; socklen_t addrlen = sizeof(serveraddr); - getsockname(sockfd, (struct sockaddr *)&serveraddr, &addrlen); + + sockfd = socket(addr->sa_family, SOCK_DGRAM, 0); + if (sockfd <= 0) { + // Try to fall-back to IPv6 + memset(&serveraddr6, 0, sizeof(serveraddr6)); + serveraddr6.sin6_family = AF_INET6; + serveraddr6.sin6_addr = in6addr_any; + serveraddr6.sin6_port = 0; + addr = (struct sockaddr *)&serveraddr6; + addrlen = sizeof(serveraddr6); + + sockfd = socket(addr->sa_family, SOCK_DGRAM, 0); + } + assert(sockfd > 0); + + bind(sockfd, addr, addrlen); + getsockname(sockfd, addr, &addrlen); #if defined(POISON) __msan_poison(buf + 7, 1); @@ -52,7 +66,7 @@ #if defined(SENDMSG) struct iovec iov[2] = {{buf, 5}, {buf + 5, 5}}; struct msghdr msg; - msg.msg_name = &serveraddr; + msg.msg_name = addr; msg.msg_namelen = addrlen; msg.msg_iov = iov; msg.msg_iovlen = 2; @@ -62,14 +76,13 @@ #endif #if defined(SEND) - ret = connect(sockfd, (struct sockaddr *)&serveraddr, addrlen); + ret = connect(sockfd, addr, addrlen); assert(ret == 0); ret = send(sockfd, buf, kBufSize, 0); // SEND: Uninitialized bytes in __interceptor_send at offset 7 inside [{{.*}}, 10) assert(ret > 0); #elif defined(SENDTO) - ret = - sendto(sockfd, buf, kBufSize, 0, (struct sockaddr *)&serveraddr, addrlen); + ret = sendto(sockfd, buf, kBufSize, 0, addr, addrlen); // SENDTO: Uninitialized bytes in __interceptor_sendto at offset 7 inside [{{.*}}, 10) assert(ret > 0); #elif defined(SENDMSG)