This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB 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]

Re: PATCH: Initialize tmp_obstack


> Date: Tue, 16 Jan 2007 01:59:38 -0500
> From: Daniel Jacobowitz <drow@false.org>
> 
> On Sun, Dec 24, 2006 at 11:00:32PM -0500, Daniel Jacobowitz wrote:
>
> I'm travelling again - excuse spotty response this week, please.  But
> that means I'm hacking on GDB on my laptop again, which is affected by
> this problem.
> 
> How can we avoid the uninitialized warnings?

I had another look and come up with the attached.  By always
initializing tmp_obstack the code is less optimal, but at least I can
convince myself the code is safe now.  Unfortunately I can't test
whether this fixes the GCC 4.1 warnings.

Index: ChangeLog
from  Mark Kettenis  <kettenis@gnu.org>

	* cp-valprint.c (cp_print_value_fields, cp_print_value): Always
	initialize tmp_obstack.

Index: cp-valprint.c
===================================================================
RCS file: /cvs/src/src/gdb/cp-valprint.c,v
retrieving revision 1.47
diff -u -p -r1.47 cp-valprint.c
--- cp-valprint.c 9 Jan 2007 17:58:50 -0000 1.47
+++ cp-valprint.c 21 Jan 2007 12:44:23 -0000
@@ -167,7 +167,6 @@ cp_print_value_fields (struct type *type
 		       struct type **dont_print_vb,int dont_print_statmem)
 {
   int i, len, n_baseclasses;
-  struct obstack tmp_obstack;
   char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
   int fields_seen = 0;
 
@@ -197,12 +196,13 @@ cp_print_value_fields (struct type *type
     fprintf_filtered (stream, "<No data fields>");
   else
     {
+      struct obstack tmp_obstack = dont_print_statmem_obstack;
+
       if (dont_print_statmem == 0)
 	{
 	  /* If we're at top level, carve out a completely fresh
 	     chunk of the obstack and use that until this particular
 	     invocation returns.  */
-	  tmp_obstack = dont_print_statmem_obstack;
 	  obstack_finish (&dont_print_statmem_obstack);
 	}
 
@@ -426,9 +426,9 @@ cp_print_value (struct type *type, struc
 		struct ui_file *stream, int format, int recurse,
 		enum val_prettyprint pretty, struct type **dont_print_vb)
 {
-  struct obstack tmp_obstack;
   struct type **last_dont_print
     = (struct type **) obstack_next_free (&dont_print_vb_obstack);
+  struct obstack tmp_obstack = dont_print_vb_obstack;
   int i, n_baseclasses = TYPE_N_BASECLASSES (type);
   int thisoffset;
   struct type *thistype;
@@ -438,7 +438,6 @@ cp_print_value (struct type *type, struc
       /* If we're at top level, carve out a completely fresh
          chunk of the obstack and use that until this particular
          invocation returns.  */
-      tmp_obstack = dont_print_vb_obstack;
       /* Bump up the high-water mark.  Now alpha is omega.  */
       obstack_finish (&dont_print_vb_obstack);
     }


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