Patch to avoid problematic casts in obstack.h

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Mon Aug 30 18:57:00 GMT 1999


	The macro definitions of obstack_grow{0} in obstack.h cast
the src pointer of calls to _obstack_memcpy to char*.  This makes
compiling with -Wcast-qual pretty useless because of all the false
positives whenever obstack_grow{0} are called with a const src ptr.

	This patch moves the casts from the definitions of
obstack_grow{0} to _obstack_memcpy.  However in the __STDC__ case, I
omit the cast since then memcpy should have a prototype.

I suppose if we insist on a cast in the __STDC__ case, I could make it
const void *, but I don't think its necessary.

Bootstrapped on OSF4 and Irix6.  Okay to install?

		--Kaveh



1999-08-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* obstack.h (obstack_grow, obstack_grow0): Move (char*) casts
	in calls to `_obstack_memcpy' from here ...

	(_obstack_memcpy): ... to here, except in the __STDC__ case which
	doesn't need it.


diff -rup orig/egcs-CVS19990828/include/obstack.h egcs-CVS19990828/include/obstack.h
--- orig/egcs-CVS19990828/include/obstack.h	Sat Sep  5 08:25:19 1998
+++ egcs-CVS19990828/include/obstack.h	Sat Aug 28 16:08:26 1999
@@ -143,12 +143,16 @@ extern "C" {
 
 #if defined _LIBC || defined HAVE_STRING_H
 # include <string.h>
-# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+# if defined __STDC__ && __STDC__
+#  define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+# else
+#  define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N))
+# endif
 #else
 # ifdef memcpy
-#  define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+#  define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N))
 # else
-#  define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
+#  define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N))
 # endif
 #endif
 
@@ -385,7 +389,7 @@ __extension__								\
    int __len = (length);						\
    if (__o->next_free + __len > __o->chunk_limit)			\
      _obstack_newchunk (__o, __len);					\
-   _obstack_memcpy (__o->next_free, (char *) (where), __len);		\
+   _obstack_memcpy (__o->next_free, (where), __len);			\
    __o->next_free += __len;						\
    (void) 0; })
 
@@ -395,7 +399,7 @@ __extension__								\
    int __len = (length);						\
    if (__o->next_free + __len + 1 > __o->chunk_limit)			\
      _obstack_newchunk (__o, __len + 1);				\
-   _obstack_memcpy (__o->next_free, (char *) (where), __len);		\
+   _obstack_memcpy (__o->next_free, (where), __len);			\
    __o->next_free += __len;						\
    *(__o->next_free)++ = 0;						\
    (void) 0; })
@@ -510,14 +514,14 @@ __extension__								\
 ( (h)->temp = (length),							\
   (((h)->next_free + (h)->temp > (h)->chunk_limit)			\
    ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
-  _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp),	\
+  _obstack_memcpy ((h)->next_free, (where), (h)->temp),			\
   (h)->next_free += (h)->temp)
 
 # define obstack_grow0(h,where,length)					\
 ( (h)->temp = (length),							\
   (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit)			\
    ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0),			\
-  _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp),	\
+  _obstack_memcpy ((h)->next_free, (where), (h)->temp),			\
   (h)->next_free += (h)->temp,						\
   *((h)->next_free)++ = 0)
 


More information about the Gcc-patches mailing list