This patch stops the gimple printer from using global pretty printers.  

Applied to trunk.

-- Gaby

2013-08-05  Gabriel Dos Reis  <g...@integrable-solutions.net>
 
        * gimple-pretty-print.c (buffer): Remove.
        (initialized): Likewise.
        (maybe_init_pretty_print): Likewise.
        (print_gimple_stmt): Do not call it.  Use non-static local
        pretty_printer variable.
        (print_gimple_expr): Likewise.
        (print_gimple_seq): Likewise.
        (gimple_dump_bb): Likewise.

Index: gimple-pretty-print.c
===================================================================
--- gimple-pretty-print.c       (revision 201481)
+++ gimple-pretty-print.c       (working copy)
@@ -36,9 +36,6 @@
 #define INDENT(SPACE)                                                  \
   do { int i; for (i = 0; i < SPACE; i++) pp_space (buffer); } while (0)
 
-static pretty_printer buffer;
-static bool initialized = false;
-
 #define GIMPLE_NIY do_niy (buffer,gs)
 
 /* Try to print on BUFFER a default message for the unrecognized
@@ -52,22 +49,6 @@
 }
 
 
-/* Initialize the pretty printer on FILE if needed.  */
-
-static void
-maybe_init_pretty_print (FILE *file)
-{
-  if (!initialized)
-    {
-      pp_construct (&buffer, NULL, 0);
-      pp_needs_newline (&buffer) = true;
-      initialized = true;
-    }
-
-  buffer.buffer->stream = file;
-}
-
-
 /* Emit a newline and SPC indentation spaces to BUFFER.  */
 
 static void
@@ -93,7 +74,10 @@
 void
 print_gimple_stmt (FILE *file, gimple g, int spc, int flags)
 {
-  maybe_init_pretty_print (file);
+  pretty_printer buffer;
+  pp_construct (&buffer, NULL, 0);
+  pp_needs_newline (&buffer) = true;
+  buffer.buffer->stream = file;
   pp_gimple_stmt_1 (&buffer, g, spc, flags);
   pp_newline_and_flush (&buffer);
 }
@@ -122,7 +106,10 @@
 print_gimple_expr (FILE *file, gimple g, int spc, int flags)
 {
   flags |= TDF_RHS_ONLY;
-  maybe_init_pretty_print (file);
+  pretty_printer buffer;
+  pp_construct (&buffer, NULL, 0);
+  pp_needs_newline (&buffer) = true;
+  buffer.buffer->stream = file;
   pp_gimple_stmt_1 (&buffer, g, spc, flags);
   pp_flush (&buffer);
 }
@@ -155,7 +142,10 @@
 void
 print_gimple_seq (FILE *file, gimple_seq seq, int spc, int flags)
 {
-  maybe_init_pretty_print (file);
+  pretty_printer buffer;
+  pp_construct (&buffer, NULL, 0);
+  pp_needs_newline (&buffer) = true;
+  buffer.buffer->stream = file;
   dump_gimple_seq (&buffer, seq, spc, flags);
   pp_newline_and_flush (&buffer);
 }
@@ -2279,7 +2269,10 @@
   dump_gimple_bb_header (file, bb, indent, flags);
   if (bb->index >= NUM_FIXED_BLOCKS)
     {
-      maybe_init_pretty_print (file);
+      pretty_printer buffer;
+      pp_construct (&buffer, NULL, 0);
+      pp_needs_newline (&buffer) = true;
+      buffer.buffer->stream = file;
       gimple_dump_bb_buff (&buffer, bb, indent, flags);
     }
   dump_gimple_bb_footer (file, bb, indent, flags);

Reply via email to