Some comments were wrong. In particular, the strings read from the stream are placed in a data table, and thus the strings returned DO NOT need to be freed by the caller, they belong to the stream who handles them itself.
Also lto_output_string_with_length does handle NULL strings, removed the redundant logic. Tested with bootstrap build and pph regression testing. 2011-06-29 Gabriel Charette <gch...@google.com> * pph-streamer.h (struct pph_stream): Fix comment of data_in field. (pph_out_string_with_length): lto_output_string_with_length now handles NULL strings, call it directly. (pph_in_string): Fix comment. diff --git a/gcc/cp/pph-streamer.h b/gcc/cp/pph-streamer.h index b899501..8d0c024 100644 --- a/gcc/cp/pph-streamer.h +++ b/gcc/cp/pph-streamer.h @@ -100,7 +100,7 @@ typedef struct pph_stream { struct lto_input_block *ib; /* String tables and other descriptors used by the LTO reading - routines. NULL when the file is opened for reading. */ + routines. NULL when the file is opened for writing. */ struct data_in *data_in; /* Array of sections in the PPH file. */ @@ -250,21 +250,10 @@ static inline void pph_out_string_with_length (pph_stream *stream, const char *str, unsigned int len) { - if (str) - { - if (flag_pph_tracer >= 4) - pph_trace_string_with_length (stream, str, len); - lto_output_string_with_length (stream->ob, stream->ob->main_stream, - str, len + 1, false); - } - else - { - /* lto_output_string_with_length does not handle NULL strings, - but lto_output_string does. */ - if (flag_pph_tracer >= 4) - pph_trace_string (stream, str); - pph_out_string (stream, NULL); - } + if (flag_pph_tracer >= 4) + pph_trace_string_with_length (stream, str, len); + lto_output_string_with_length (stream->ob, stream->ob->main_stream, + str, len + 1, false); } /* Output VEC V of ASTs to STREAM. @@ -338,9 +327,7 @@ pph_in_bytes (pph_stream *stream, void *p, size_t n) pph_trace_bytes (stream, p, n); } -/* Read and return a string of up to MAX characters from STREAM. - The caller is responsible for freeing the memory allocated - for the string. */ +/* Read and return a string of up to MAX characters from STREAM. */ static inline const char * pph_in_string (pph_stream *stream) -- This patch is available for review at http://codereview.appspot.com/4654076