aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurynas Biveinis <laurynas.biveinis@gmail.com>2007-07-23 16:15:23 +0000
committerLaurynas Biveinis <laurynas.biveinis@gmail.com>2007-07-23 16:15:23 +0000
commit47e81efb192b9fb7e8bdbe3df202cb11f673da62 (patch)
tree9728bb049d15f9aaf4b33709bc91fc139ca839b2
parent015991bcba9fe54f589334f2626da8714502fc9c (diff)
Allocate format_wanted_type variables in obstack instead of GC
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/boehms-gc@126850 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/c-format.c14
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index e3adc7a53bd..aeadb1c97dc 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1677,7 +1677,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) c-format.h \
+ $(OBSTACK_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 403724e5e11..c0397103e8f 100644
--- a/gcc/c-format.c
+++ b/gcc/c-format.c
@@ -31,6 +31,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "diagnostic.h"
#include "langhooks.h"
#include "c-format.h"
+#include "obstack.h"
/* Set format warning options according to a -Wformat=n option. */
@@ -811,7 +812,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, struct obstack *);
static void init_dollar_format_checking (int, tree);
static int maybe_read_dollar_number (const char **, int,
@@ -1281,6 +1282,8 @@ check_format_arg (void *ctx, tree format_tree,
tree array_size = 0;
tree array_init;
+ struct obstack fwt_obstack;
+
if (integer_zerop (format_tree))
{
/* Skip to first argument to check, so we can see if this format
@@ -1414,8 +1417,10 @@ 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++;
+ gcc_obstack_init (&fwt_obstack);
check_format_info_main (res, info, format_chars, format_length,
- params, arg_num);
+ params, arg_num, &fwt_obstack);
+ obstack_free (&fwt_obstack, NULL);
}
@@ -1430,7 +1435,8 @@ 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,
+ struct obstack *fwt_obstack)
{
const char *orig_format_chars = format_chars;
tree first_fillin_param = params;
@@ -2077,7 +2083,7 @@ 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 *)obstack_alloc (fwt_obstack, sizeof(format_wanted_type));
arg_num++;
wanted_type = *fci->types[length_chars_val].type;
wanted_type_name = fci->types[length_chars_val].name;