summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/c-format.c25
3 files changed, 21 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f06ccc5080d..8a2dd2263ca 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2007-09-04 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.
+
2007-09-05 Ben Elliston <bje@au.ibm.com>
* config/rs6000/ppu_intrinsics.h (__protected_stream_count):
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 1979b72e6d0..1846b8e6baf 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1810,7 +1810,8 @@ attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(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) \
diff --git a/gcc/c-format.c b/gcc/c-format.c
index a4965418d53..25cf859a161 100644
--- a/gcc/c-format.c
+++ b/gcc/c-format.c
@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see
#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_arg (void *, tree, unsigned HOST_WIDE_INT);
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 @@ check_format_arg (void *ctx, tree format_tree,
const char *format_chars;
tree array_size = 0;
tree array_init;
+ alloc_pool fwt_pool;
if (integer_zerop (format_tree))
{
@@ -1424,8 +1426,11 @@ check_format_arg (void *ctx, tree format_tree,
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 @@ static void
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 @@ check_format_info_main (format_check_results *res,
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 @@ check_format_info_main (format_check_results *res,
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;
- }
- }
}
}