Hello, I tried to build the last revision from CVS and I got this error:
gnu_java_nio_VMChannel.c: In function ‘Java_gnu_java_nio_VMChannel_receive’: gnu_java_nio_VMChannel.c:812: error: dereferencing pointer ‘sockaddr’ does break strict-aliasing rules gnu_java_nio_VMChannel.c:804: error: dereferencing pointer ‘sockaddr’ does break strict-aliasing rules This is the gcc version I am using: $ gcc --version gcc (Debian 4.4.2-9) 4.4.3 20100108 (prerelease) I am not sure this is the proper way to fix it, it looks to me like a hack but I don't know a better way to do it, any comment? Cheers, Giuseppe +2010-02-14 Giuseppe Scrivano <gscriv...@gnu.org> + + * native/jni/java-nio/gnu_java_nio_VMChannel.c + (Java_gnu_java_nio_VMChannel_getpeername): Change type of + `sock_storage' to char[]. + (Java_gnu_java_nio_VMChannel_getsockname): Likewise. + (Java_gnu_java_nio_VMChannel_receive): Likewise. + 2010-01-15 Rainer Orth <r...@cebitec.uni-bielefeld.de> PR libgcj/38251 Index: native/jni/java-nio/gnu_java_nio_VMChannel.c =================================================================== RCS file: /sources/classpath/classpath/native/jni/java-nio/gnu_java_nio_VMChannel.c,v retrieving revision 1.22 diff -u -r1.22 gnu_java_nio_VMChannel.c --- native/jni/java-nio/gnu_java_nio_VMChannel.c 28 Dec 2007 17:49:56 -0000 1.22 +++ native/jni/java-nio/gnu_java_nio_VMChannel.c 14 Feb 2010 17:11:08 -0000 @@ -758,11 +758,11 @@ char *addrPortPtr = (*env)->GetDirectBufferAddress (env, addrPort); struct JCL_buffer buf; #ifdef HAVE_INET6 - struct sockaddr_in6 sock_storage; struct sockaddr_in6 *sock6; + char sock_storage[sizeof (struct sockaddr_in6)]; socklen_t slen = sizeof (struct sockaddr_in6); #else - struct sockaddr_in sock_storage; + char sock_storage[sizeof (struct sockaddr_in)]; socklen_t slen = sizeof (struct sockaddr_in); #endif /* HAVE_INET6 */ struct sockaddr *sockaddr = (struct sockaddr *) &sock_storage; @@ -1360,10 +1360,10 @@ #ifdef HAVE_GETSOCKNAME #ifdef HAVE_INET6 struct sockaddr_in6 *addr6; - struct sockaddr_in6 sock_storage; + char sock_storage[sizeof (struct sockaddr_in6)]; socklen_t socklen = sizeof (struct sockaddr_in6); #else - struct sockaddr_in sock_storage; + char sock_storage[sizeof (struct sockaddr_in)]; socklen_t socklen = sizeof (struct sockaddr_in); #endif /* HAVE_INET6 */ @@ -1420,10 +1420,11 @@ #ifdef HAVE_GETPEERNAME #ifdef HAVE_INET6 struct sockaddr_in6 *addr6; - struct sockaddr_in6 sock_storage; + /* struct sockaddr_in6 sock_storage;*/ + char sock_storage[sizeof (struct sockaddr_in6)]; socklen_t socklen = sizeof (struct sockaddr_in6); #else - struct sockaddr_in sock_storage; + char sock_storage[sizeof (struct sockaddr_in)]; socklen_t socklen = sizeof (struct sockaddr_in); #endif /* HAVE_INET6 */ _______________________________________________ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches