Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Fix aliasing violations
@ 2004-10-23 18:28 Andreas Schwab
  2004-10-23 18:37 ` Daniel Jacobowitz
  0 siblings, 1 reply; 3+ messages in thread
From: Andreas Schwab @ 2004-10-23 18:28 UTC (permalink / raw)
  To: gdb-patches

The macro GROW_VECT in ada-lang.h violates the C aliasing rules.

Andreas.

2004-10-23  Andreas Schwab  <schwab@suse.de>

	* ada-lang.c (grow_vect): Return the new array instead of
	expecting pointer to pointer to avoid violation of aliasing rules.
	* ada-lang.h (GROW_VECT): Adapt call to grow_vect.

--- gdb/ada-lang.c	20 Oct 2004 01:01:25 +0200	1.59
+++ gdb/ada-lang.c	23 Oct 2004 20:12:45 +0200	
@@ -319,20 +319,21 @@ extract_string (CORE_ADDR addr, char *bu
   while (buf[char_index - 1] != '\000');
 }
 
-/* Assuming *OLD_VECT points to an array of *SIZE objects of size
+/* Assuming VECT points to an array of *SIZE objects of size
    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
-   updating *OLD_VECT and *SIZE as necessary.  */
+   updating *SIZE as necessary and returning the (new) array.  */
 
-void
-grow_vect (void **old_vect, size_t * size, size_t min_size, int element_size)
+void *
+grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
 {
   if (*size < min_size)
     {
       *size *= 2;
       if (*size < min_size)
         *size = min_size;
-      *old_vect = xrealloc (*old_vect, *size * element_size);
+      vect = xrealloc (vect, *size * element_size);
     }
+  return vect;
 }
 
 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
--- gdb/ada-lang.h	20 Oct 2004 01:01:25 +0200	1.13
+++ gdb/ada-lang.h	23 Oct 2004 20:13:27 +0200	
@@ -171,9 +171,9 @@ extern struct task_entry *task_list;
    least M objects, updating V and S as necessary. */
 
 #define GROW_VECT(v, s, m)                                              \
-   if ((s) < (m)) grow_vect ((void**) &(v), &(s), (m), sizeof(*(v)));
+   if ((s) < (m)) (v) = grow_vect (v, &(s), m, sizeof *(v));
 
-extern void grow_vect (void **, size_t *, size_t, int);
+extern void *grow_vect (void *, size_t *, size_t, int);
 
 extern int ada_get_field_index (const struct type *type,
                                 const char *field_name,

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-10-23 19:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-23 18:28 Fix aliasing violations Andreas Schwab
2004-10-23 18:37 ` Daniel Jacobowitz
2004-10-23 19:08   ` Andreas Schwab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox