[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cp-patches] [RFC][PATCH] don't break strict-aliasing rules
From: |
Giuseppe Scrivano |
Subject: |
[cp-patches] [RFC][PATCH] don't break strict-aliasing rules |
Date: |
Sun, 14 Feb 2010 19:44:19 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.92 (gnu/linux) |
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 <address@hidden>
+
+ * 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 <address@hidden>
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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [cp-patches] [RFC][PATCH] don't break strict-aliasing rules,
Giuseppe Scrivano <=