diff options
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/Makefile.in | 3 | ||||
-rw-r--r-- | gcc/pretty-print.c | 30 | ||||
-rw-r--r-- | gcc/pretty-print.h | 2 | ||||
-rw-r--r-- | gcc/toplev.c | 11 |
5 files changed, 44 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91d39a2bd09..e86992578ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2010-05-26 Joseph Myers <joseph@codesourcery.com> + + * pretty-print.c: Don't include ggc.h. + (identifier_to_locale_alloc, identifier_to_locale_free): Define. + (identifier_to_locale): Use them for allocation. + * pretty-print.h (identifier_to_locale_alloc, + identifier_to_locale_free): Declare. + * toplev.c (alloc_for_identifier_to_locale): New. + (general_init): Set identifier_to_locale_alloc and + identifier_to_locale_free. + * Makefile.in (pretty-print.o): Update dependencies. + 2010-05-26 Eric Botcazou <ebotcazou@adacore.com> * gimple.c (gimple_types_compatible_p): Return 0 for aggregate and diff --git a/gcc/Makefile.in b/gcc/Makefile.in index bbb16f9a743..77b836fdd76 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -3398,8 +3398,7 @@ params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) \ $(TOPLEV_H) pointer-set.o: pointer-set.c pointer-set.h $(CONFIG_H) $(SYSTEM_H) hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H) -pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \ - $(GGC_H) +pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h $(BCONFIG_H) dbgcnt.o: dbgcnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TOPLEV_H) $(DBGCNT_H) \ $(TM_H) $(RTL_H) output.h diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c index af28387b700..aa8924cad9f 100644 --- a/gcc/pretty-print.c +++ b/gcc/pretty-print.c @@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "intl.h" #include "pretty-print.h" -#include "ggc.h" #if HAVE_ICONV #include <iconv.h> @@ -857,14 +856,21 @@ decode_utf8_char (const unsigned char *p, size_t len, unsigned int *value) } } +/* Allocator for identifier_to_locale and corresponding function to + free memory. */ + +void *(*identifier_to_locale_alloc) (size_t) = xmalloc; +void (*identifier_to_locale_free) (void *) = free; + /* Given IDENT, an identifier in the internal encoding, return a version of IDENT suitable for diagnostics in the locale character - set: either IDENT itself, or a garbage-collected string converted - to the locale character set and using escape sequences if not - representable in the locale character set or containing control - characters or invalid byte sequences. Existing backslashes in - IDENT are not doubled, so the result may not uniquely specify the - contents of an arbitrary byte sequence identifier. */ + set: either IDENT itself, or a string, allocated using + identifier_to_locale_alloc, converted to the locale character set + and using escape sequences if not representable in the locale + character set or containing control characters or invalid byte + sequences. Existing backslashes in IDENT are not doubled, so the + result may not uniquely specify the contents of an arbitrary byte + sequence identifier. */ const char * identifier_to_locale (const char *ident) @@ -895,7 +901,7 @@ identifier_to_locale (const char *ident) outside printable ASCII. */ if (!valid_printable_utf8) { - char *ret = GGC_NEWVEC (char, 4 * idlen + 1); + char *ret = (char *) identifier_to_locale_alloc (4 * idlen + 1); char *p = ret; for (i = 0; i < idlen; i++) { @@ -938,7 +944,7 @@ identifier_to_locale (const char *ident) size_t outbytesleft = ret_alloc - 1; size_t iconv_ret; - ret = GGC_NEWVEC (char, ret_alloc); + ret = (char *) identifier_to_locale_alloc (ret_alloc); outbuf = ret; if (iconv (cd, 0, 0, 0, 0) == (size_t) -1) @@ -954,7 +960,7 @@ identifier_to_locale (const char *ident) if (errno == E2BIG) { ret_alloc *= 2; - ggc_free (ret); + identifier_to_locale_free (ret); ret = NULL; continue; } @@ -975,7 +981,7 @@ identifier_to_locale (const char *ident) if (errno == E2BIG) { ret_alloc *= 2; - ggc_free (ret); + identifier_to_locale_free (ret); ret = NULL; continue; } @@ -997,7 +1003,7 @@ identifier_to_locale (const char *ident) /* Otherwise, convert non-ASCII characters in IDENT to UCNs. */ { - char *ret = GGC_NEWVEC (char, 10 * idlen + 1); + char *ret = (char *) identifier_to_locale_alloc (10 * idlen + 1); char *p = ret; for (i = 0; i < idlen;) { diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h index c3c3e6dc4dd..a2e3c40a882 100644 --- a/gcc/pretty-print.h +++ b/gcc/pretty-print.h @@ -339,5 +339,7 @@ pp_set_verbatim_wrapping_ (pretty_printer *pp) #define pp_set_verbatim_wrapping(PP) pp_set_verbatim_wrapping_ (pp_base (PP)) extern const char *identifier_to_locale (const char *); +extern void *(*identifier_to_locale_alloc) (size_t); +extern void (*identifier_to_locale_free) (void *); #endif /* GCC_PRETTY_PRINT_H */ diff --git a/gcc/toplev.c b/gcc/toplev.c index 83008da3a6b..f22c4d5bebd 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1668,6 +1668,14 @@ realloc_for_line_map (void *ptr, size_t len) return ggc_realloc (ptr, len); } +/* A helper function: used as the allocator function for + identifier_to_locale. */ +static void * +alloc_for_identifier_to_locale (size_t len) +{ + return ggc_alloc (len); +} + /* Initialization of the front end environment, before command line options are parsed. Signal handlers, internationalization etc. ARGV0 is main's argv[0]. */ @@ -1690,6 +1698,9 @@ general_init (const char *argv0) gcc_init_libintl (); + identifier_to_locale_alloc = alloc_for_identifier_to_locale; + identifier_to_locale_free = ggc_free; + /* Initialize the diagnostics reporting machinery, so option parsing can give warnings and errors. */ diagnostic_initialize (global_dc, N_OPTS); |