Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Mark Kettenis <mark.kettenis@xs4all.nl>,
	gdb-patches@sourceware.org, 	hongjiu.lu@intel.com
Subject: Re: PATCH: Initialize tmp_obstack
Date: Sun, 21 Jan 2007 17:24:00 -0000	[thread overview]
Message-ID: <20070121172426.GC12463@nevyn.them.org> (raw)
In-Reply-To: <20070121155940.GA9459@nevyn.them.org>

On Sun, Jan 21, 2007 at 10:59:41AM -0500, Daniel Jacobowitz wrote:
> On Sun, Jan 21, 2007 at 02:07:14PM +0100, Mark Kettenis wrote:
> > 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.
> 
> Thanks!  I can test it - I'll let you know this afternoon.

Works fine.

> p-valprint.c has the same problem, but the correct fix there is going
> to be to delete some code.  Pascal copied a lot from C/C++ but it
> doesn't actually have static members to the best of my knowledge.
> I see some discussion of them as planned for GNU Pascal, but no
> implementations.

But it was easier to copy your fix into p-valprint.c than to untangle
which parts of this Pascal really needs and which parts it just copied.
Wish we had some test coverage for pascal!

See attached; cp-valprint.c parts unchanged, p-valprint.c parts copied
from that and compile tested only.

-- 
Daniel Jacobowitz
CodeSourcery

from  Mark Kettenis  <kettenis@gnu.org>

	* cp-valprint.c (cp_print_value_fields, cp_print_value): Always
	initialize tmp_obstack.
	* p-valprint.c (pascal_object_print_value_fields)
	(pascal_object_print_value): Likewise.

---
 gdb/cp-valprint.c |    7 +++----
 gdb/p-valprint.c  |    6 ++----
 2 files changed, 5 insertions(+), 8 deletions(-)

Index: src/gdb/cp-valprint.c
===================================================================
--- src.orig/gdb/cp-valprint.c	2007-01-21 12:17:05.000000000 -0500
+++ src/gdb/cp-valprint.c	2007-01-21 12:17:09.000000000 -0500
@@ -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: src/gdb/p-valprint.c
===================================================================
--- src.orig/gdb/p-valprint.c	2007-01-21 12:17:07.000000000 -0500
+++ src/gdb/p-valprint.c	2007-01-21 12:20:40.000000000 -0500
@@ -641,7 +641,6 @@ pascal_object_print_value_fields (struct
 				  int dont_print_statmem)
 {
   int i, len, n_baseclasses;
-  struct obstack tmp_obstack;
   char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
 
   CHECK_TYPEDEF (type);
@@ -660,6 +659,7 @@ pascal_object_print_value_fields (struct
     fprintf_filtered (stream, "<No data fields>");
   else
     {
+      struct obstack tmp_obstack = dont_print_statmem_obstack;
       int fields_seen = 0;
 
       if (dont_print_statmem == 0)
@@ -667,7 +667,6 @@ pascal_object_print_value_fields (struct
 	  /* 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);
 	}
 
@@ -810,9 +809,9 @@ pascal_object_print_value (struct type *
 			   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);
 
   if (dont_print_vb == 0)
@@ -820,7 +819,6 @@ pascal_object_print_value (struct type *
       /* 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);
     }


  reply	other threads:[~2007-01-21 17:24 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-02 18:27 H. J. Lu
2006-12-05 20:40 ` Daniel Jacobowitz
2006-12-05 20:56   ` H. J. Lu
2006-12-05 21:00     ` Daniel Jacobowitz
     [not found]   ` <12601.163.1.150.229.1165354805.squirrel@webmail.xs4all.nl>
     [not found]     ` <20061205214306.GA29801@nevyn.them.org>
     [not found]       ` <20637.163.1.150.229.1165355320.squirrel@webmail.xs4all.nl>
2006-12-05 21:56         ` Daniel Jacobowitz
2006-12-05 21:59           ` Daniel Jacobowitz
2006-12-05 22:24             ` Jim Blandy
2006-12-05 23:58           ` Daniel Jacobowitz
2006-12-07 14:40             ` Daniel Jacobowitz
2006-12-25  4:00               ` Daniel Jacobowitz
2007-01-16  6:59                 ` Daniel Jacobowitz
2007-01-16 21:32                   ` Mark Kettenis
2007-01-21 13:07                   ` Mark Kettenis
2007-01-21 15:59                     ` Daniel Jacobowitz
2007-01-21 17:24                       ` Daniel Jacobowitz [this message]
2007-02-08 14:21                         ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070121172426.GC12463@nevyn.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    --cc=hongjiu.lu@intel.com \
    --cc=mark.kettenis@xs4all.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox