https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90718
Bug ID: 90718 Summary: libphobos.phobos_shared/std/socket.d FAILs on 32-bit Solaris/SPARC Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: d Assignee: ibuclaw at gdcproject dot org Reporter: ro at gcc dot gnu.org Target Milestone: --- Target: sparc*-*-solaris2.11 The libphobos.phobos_shared/std/socket.d test FAILs on 32-bit Solaris/SPARC: Thread 2 received signal SIGSEGV, Segmentation fault. [Switching to Thread 1 (LWP 1)] 0x00043eb4 in std.socket.getAddressInfoImpl(const(char[]), const(char[]), core.sys.posix.netdb.addrinfo*) (node=..., service=..., hints=0xffbfddd4) at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/socket.d:1006 1006 cast(AddressFamily) ai.ai_family, 1: x/i $pc => 0x43eb4 <_D3std6socket18getAddressInfoImplFxAaxAaPS4core3sys5posix5netdb8addrinfoZAS3std6socket11AddressInfo+504>: ld [ %g1 + 4 ], %g1 (gdb) p/x $g1 $1 = 0x21 The first time through, ai is $9 = {ai_flags = 0, ai_family = 2, ai_socktype = 0, ai_protocol = 0, _ai_pad = 16, ai_addrlen = 0, ai_canonname = 0xac710 "", ai_addr = 0xac4c0, ai_next = 0x21} i.e. ai_next is bogus. Comparing the struct addrinfo declarations in <netdb.h> struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME, ... */ int ai_family; /* PF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ #ifdef __sparcv9 int _ai_pad; /* for backwards compat with old size_t */ #endif /* __sparcv9 */ socklen_t ai_addrlen; char *ai_canonname; /* canonical name for hostname */ struct sockaddr *ai_addr; /* binary address */ struct addrinfo *ai_next; /* next structure in linked list */ }; and libdruntime/core/sys/posix/netdb.d struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; version (SPARC) int _ai_pad; else version (SPARC64) int _ai_pad; socklen_t ai_addrlen; char* ai_canonname; sockaddr* ai_addr; addrinfo* ai_next; } There's a mismatch here: the system version has no _ai_pad member on 32-bit SPARC; no idea how this crept into the druntime version. Fixing as in the attached patch lets the test get further along. It still FAILs however: Aborting from /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/gcc/sections/elf_shared.d(724) DSO already registered. but this is a different issue affecting a couple of other tests as well.