This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PR 14548


This backport of Joseph's patch to correct uses of cast-as-lvalue
in GCC sources let bootstrap GCC-3.3.4-pre with current CVS gcc.

Regested and applied to gcc-3_3-branch.

-- Gaby

Index: include/ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/include/ChangeLog,v
retrieving revision 1.124.2.12
diff -p -r1.124.2.12 ChangeLog
*** include/ChangeLog	14 Feb 2004 20:19:38 -0000	1.124.2.12
--- include/ChangeLog	2 Mar 2004 01:30:54 -0000
***************
*** 1,3 ****
--- 1,22 ----
+ 2004-03-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	PR bootstrap/14348
+ 	Backport
+ 	2003-10-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 	* obstack.h: Merge the following change from gnulib:
+ 	2003-10-21  Paul Eggert  <eggert@twinsun.com>
+ 	* obstack.h (obstack_1grow_fast): Properly parenthesize arg.
+ 	(obstack_ptr_grow_fast, obstack_int_grow_fast):
+ 	Don't use lvalue casts, as GCC plans to remove support for them
+ 	in GCC 3.5.  Reported by Joseph S. Myers.  This bug
+ 	was also present in the non-GCC version, indicating that this
+ 	code had always been buggy and had never been widely used.
+ 	(obstack_1grow, obstack_ptr_grow, obstack_int_grow,
+ 	obstack_blank):
+ 	Use the fast variant of each macro, rather than copying the
+ 	definiens of the fast variant; that way, we'll be more likely to
+ 	catch future bugs in the fast variants.
+ 
  2004-02-14  Release Manager
  
  	* GCC 3.3.3 Released.
Index: include/obstack.h
===================================================================
RCS file: /cvs/gcc/gcc/include/obstack.h,v
retrieving revision 1.5
diff -p -r1.5 obstack.h
*** include/obstack.h	14 Mar 2001 19:44:38 -0000	1.5
--- include/obstack.h	2 Mar 2004 01:30:55 -0000
*************** extern int obstack_exit_failure;
*** 343,349 ****
  
  #endif
  
! #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)
  
  #define obstack_blank_fast(h,n) ((h)->next_free += (n))
  
--- 343,349 ----
  
  #endif
  
! #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
  
  #define obstack_blank_fast(h,n) ((h)->next_free += (n))
  
*************** __extension__								\
*** 411,417 ****
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + 1 > __o->chunk_limit)				\
       _obstack_newchunk (__o, 1);					\
!    *(__o->next_free)++ = (datum);					\
     (void) 0; })
  
  /* These assume that the obstack alignment is good enough for pointers or ints,
--- 411,417 ----
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + 1 > __o->chunk_limit)				\
       _obstack_newchunk (__o, 1);					\
!    obstack_1grow_fast (__o, datum);					\
     (void) 0; })
  
  /* These assume that the obstack alignment is good enough for pointers or ints,
*************** __extension__								\
*** 423,441 ****
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (void *));				\
!    *((void **)__o->next_free)++ = ((void *)datum);			\
!    (void) 0; })
  
  # define obstack_int_grow(OBSTACK,datum)				\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (int));				\
!    *((int *)__o->next_free)++ = ((int)datum);				\
     (void) 0; })
  
! # define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
  
  # define obstack_blank(OBSTACK,length)					\
  __extension__								\
--- 423,450 ----
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (void *));				\
!    obstack_ptr_grow_fast (__o, datum); })
  
  # define obstack_int_grow(OBSTACK,datum)				\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (int));				\
!    obstack_int_grow_fast (__o, datum); })
! 
! # define obstack_ptr_grow_fast(OBSTACK,aptr)				\
! __extension__								\
! ({ struct obstack *__o1 = (OBSTACK);					\
!    *(const void **) __o1->next_free = (aptr);				\
!    __o1->next_free += sizeof (const void *);				\
     (void) 0; })
  
! # define obstack_int_grow_fast(OBSTACK,aint)				\
! __extension__								\
! ({ struct obstack *__o1 = (OBSTACK);					\
!    *(int *) __o1->next_free = (aint);					\
!    __o1->next_free += sizeof (int);					\
!    (void) 0; })
  
  # define obstack_blank(OBSTACK,length)					\
  __extension__								\
*************** __extension__								\
*** 443,449 ****
     int __len = (length);						\
     if (__o->chunk_limit - __o->next_free < __len)			\
       _obstack_newchunk (__o, __len);					\
!    __o->next_free += __len;						\
     (void) 0; })
  
  # define obstack_alloc(OBSTACK,length)					\
--- 452,458 ----
     int __len = (length);						\
     if (__o->chunk_limit - __o->next_free < __len)			\
       _obstack_newchunk (__o, __len);					\
!    obstack_blank_fast (__o, __len);					\
     (void) 0; })
  
  # define obstack_alloc(OBSTACK,length)					\
*************** __extension__								\
*** 530,555 ****
  # define obstack_1grow(h,datum)						\
  ( (((h)->next_free + 1 > (h)->chunk_limit)				\
     ? (_obstack_newchunk ((h), 1), 0) : 0),				\
!   (*((h)->next_free)++ = (datum)))
  
  # define obstack_ptr_grow(h,datum)					\
  ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
     ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
!   (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))
  
  # define obstack_int_grow(h,datum)					\
  ( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
     ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
!   (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))
  
! # define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
  
  # define obstack_blank(h,length)					\
  ( (h)->temp = (length),							\
    (((h)->chunk_limit - (h)->next_free < (h)->temp)			\
     ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
!   ((h)->next_free += (h)->temp))
  
  # define obstack_alloc(h,length)					\
   (obstack_blank ((h), (length)), obstack_finish ((h)))
--- 539,567 ----
  # define obstack_1grow(h,datum)						\
  ( (((h)->next_free + 1 > (h)->chunk_limit)				\
     ? (_obstack_newchunk ((h), 1), 0) : 0),				\
!   obstack_1grow_fast (h, datum))
  
  # define obstack_ptr_grow(h,datum)					\
  ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
     ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
!   obstack_ptr_grow_fast (h, datum))
  
  # define obstack_int_grow(h,datum)					\
  ( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
     ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
!   obstack_int_grow_fast (h, datum))
! 
! # define obstack_ptr_grow_fast(h,aptr)					\
!   (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
  
! # define obstack_int_grow_fast(h,aint)					\
!   (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
  
  # define obstack_blank(h,length)					\
  ( (h)->temp = (length),							\
    (((h)->chunk_limit - (h)->next_free < (h)->temp)			\
     ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
!   obstack_blank_fast (h, (h)->temp))
  
  # define obstack_alloc(h,length)					\
   (obstack_blank ((h), (length)), obstack_finish ((h)))
Index: libobjc/ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libobjc/ChangeLog,v
retrieving revision 1.87.4.12
diff -p -r1.87.4.12 ChangeLog
*** libobjc/ChangeLog	14 Feb 2004 20:20:25 -0000	1.87.4.12
--- libobjc/ChangeLog	2 Mar 2004 01:30:57 -0000
***************
*** 1,3 ****
--- 1,10 ----
+ 2004-03-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	PR bootstrap/14348
+ 	Backport
+ 	2003-10-20  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 	* objc/hash.h (hash_string): Don't use a cast as an lvalue.
+ 
  2004-02-14  Release Manager
  
  	* GCC 3.3.3 Released.
Index: libobjc/objc/hash.h
===================================================================
RCS file: /cvs/gcc/gcc/libobjc/objc/hash.h,v
retrieving revision 1.4
diff -p -r1.4 hash.h
*** libobjc/objc/hash.h	2 Jul 2002 19:43:02 -0000	1.4
--- libobjc/objc/hash.h	2 Mar 2004 01:30:57 -0000
*************** hash_string (cache_ptr cache, const void
*** 172,181 ****
  {
    unsigned int ret = 0;
    unsigned int ctr = 0;
          
!         
!   while (*(char *) key) {
!     ret ^= *(char *) key++ << ctr;
      ctr = (ctr + 1) % sizeof (void *);
    }
  
--- 172,181 ----
  {
    unsigned int ret = 0;
    unsigned int ctr = 0;
+   const char *ckey = key;
          
!   while (*ckey) {
!     ret ^= *ckey++ << ctr;
      ctr = (ctr + 1) % sizeof (void *);
    }
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]