Updated patch: switch c-format.c to use pool instead of GC

Laurynas Biveinis laurynas.biveinis@gmail.com
Mon Sep 3 02:15:00 GMT 2007


Hello,

This version of a patch replaces a global variable with a local.

This patch cleans up one of the few places where GC is used to
allocate non-GTY type objects with the intention that they will be
collected on the next ggc_collect(). Pools are much better suited for
such kind of allocation, and also it will help to replace GC
implementation later on.

Bootstrapped on i686-pc-linux-gnu, no regressions. OK for mainline?

:ADDPATCH C:

2007-09-01  Laurynas Biveinis  <laurynas.biveinis@gmail.com>

    * c-format.c: Include alloc-pool.h.
    (check_format_info_main): New argument fwt_alloc.  Use allocation
    pool instead of GC.  Remove GC deallocation code.
    (check_format_arg): Create allocation pool, pass it to
    check_format_info_main and free it afterwards.
    * Makefile.in (c-format.o): Add alloc-pool.h dependency.

Index: gcc/c-format.c
===================================================================
--- gcc/c-format.c      (revision 127998)
+++ gcc/c-format.c      (working copy)
@@ -30,6 +30,7 @@
 #include "diagnostic.h"
 #include "langhooks.h"
 #include "c-format.h"
+#include "alloc-pool.h"


 /* Set format warning options according to a -Wformat=n option.  */

@@ -821,7 +822,7 @@
 static void check_format_info_main (format_check_results *,
                                    function_format_info *,
                                    const char *, int, tree,
-                                   unsigned HOST_WIDE_INT);
+                                    unsigned HOST_WIDE_INT, alloc_pool);

 static void init_dollar_format_checking (int, tree);
 static int maybe_read_dollar_number (const char **, int,
@@ -1300,6 +1301,7 @@
   const char *format_chars;
   tree array_size = 0;
   tree array_init;
+  alloc_pool fwt_pool;

   if (integer_zerop (format_tree))
     {
@@ -1424,8 +1426,11 @@
      will decrement it if it finds there are extra arguments, but this way
      need not adjust it for every return.  */
   res->number_other++;
+  fwt_pool = create_alloc_pool ("format_wanted_type pool",
+                                sizeof (format_wanted_type), 10);
   check_format_info_main (res, info, format_chars, format_length,
-                         params, arg_num);
+                          params, arg_num, fwt_pool);
+  free_alloc_pool (fwt_pool);
 }


@@ -1440,7 +1445,7 @@
 check_format_info_main (format_check_results *res,
                        function_format_info *info, const char *format_chars,
                        int format_length, tree params,
-                       unsigned HOST_WIDE_INT arg_num)
+                        unsigned HOST_WIDE_INT arg_num, alloc_pool fwt_pool)
 {
   const char *orig_format_chars = format_chars;
   tree first_fillin_param = params;
@@ -2087,7 +2092,8 @@
              fci = fci->chain;
              if (fci)
                {
-                 wanted_type_ptr = GGC_NEW (format_wanted_type);
+                  wanted_type_ptr = (format_wanted_type *)
+                      pool_alloc (fwt_pool);
                  arg_num++;
                  wanted_type = *fci->types[length_chars_val].type;
                  wanted_type_name = fci->types[length_chars_val].name;
@@ -2098,17 +2104,6 @@
       if (first_wanted_type != 0)
        check_format_types (first_wanted_type, format_start,
                            format_chars - format_start);
-
-      if (main_wanted_type.next != NULL)
-       {
-         format_wanted_type *wanted_type_ptr = main_wanted_type.next;
-         while (wanted_type_ptr)
-           {
-             format_wanted_type *next = wanted_type_ptr->next;
-             ggc_free (wanted_type_ptr);
-             wanted_type_ptr = next;
-           }
-       }
     }
 }

Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in     (revision 127998)
+++ gcc/Makefile.in     (working copy)
@@ -1810,7 +1810,8 @@
        $(TARGET_H) langhooks.h $(CPPLIB_H)

 c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
$(TREE_H) langhooks.h \
-       $(C_COMMON_H) $(FLAGS_H) toplev.h intl.h $(DIAGNOSTIC_H) c-format.h
+       $(C_COMMON_H) $(FLAGS_H) toplev.h intl.h $(DIAGNOSTIC_H) alloc-pool.h \
+       c-format.h

 c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
        $(TREE_H) $(FLAGS_H) toplev.h output.h $(RTL_H) $(GGC_H) \


-- 
Laurynas



More information about the Gcc-patches mailing list