mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-04 17:30:11 +08:00
re PR middle-end/56461 (GCC is leaking lots of memory)
PR middle-end/56461 * files.c (_cpp_save_file_entries): Free result at the end. * pch.c (cpp_string_free): New function. (cpp_save_state): Use it in htab_create call. (cpp_write_pch_deps): Free ss->defs. Destroy ss->definedhash. From-SVN: r196394
This commit is contained in:
parent
689eaba322
commit
3b8af25b7a
@ -1,3 +1,11 @@
|
||||
2013-03-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/56461
|
||||
* files.c (_cpp_save_file_entries): Free result at the end.
|
||||
* pch.c (cpp_string_free): New function.
|
||||
(cpp_save_state): Use it in htab_create call.
|
||||
(cpp_write_pch_deps): Free ss->defs. Destroy ss->definedhash.
|
||||
|
||||
2013-02-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* files.c (_cpp_find_file): If returning early, before storing
|
||||
|
@ -1771,6 +1771,7 @@ _cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
|
||||
struct pchf_data *result;
|
||||
size_t result_size;
|
||||
_cpp_file *f;
|
||||
bool ret;
|
||||
|
||||
for (f = pfile->all_files; f; f = f->next_file)
|
||||
++count;
|
||||
@ -1827,7 +1828,9 @@ _cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
|
||||
qsort (result->entries, result->count, sizeof (struct pchf_entry),
|
||||
pchf_save_compare);
|
||||
|
||||
return fwrite (result, result_size, 1, fp) == 1;
|
||||
ret = fwrite (result, result_size, 1, fp) == 1;
|
||||
free (result);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the pchf_data structure from F. */
|
||||
|
14
libcpp/pch.c
14
libcpp/pch.c
@ -187,6 +187,16 @@ cpp_string_eq (const void *a_p, const void *b_p)
|
||||
&& memcmp (a->text, b->text, a->len) == 0);
|
||||
}
|
||||
|
||||
/* Free memory associated with cpp_string. */
|
||||
|
||||
static void
|
||||
cpp_string_free (void *a_p)
|
||||
{
|
||||
struct cpp_string *a = (struct cpp_string *) a_p;
|
||||
free ((void *) a->text);
|
||||
free (a);
|
||||
}
|
||||
|
||||
/* Save the current definitions of the cpp_reader for dependency
|
||||
checking purposes. When writing a precompiled header, this should
|
||||
be called at the same point in the compilation as cpp_valid_state
|
||||
@ -198,7 +208,7 @@ cpp_save_state (cpp_reader *r, FILE *f)
|
||||
/* Save the list of non-void identifiers for the dependency checking. */
|
||||
r->savedstate = XNEW (struct cpp_savedstate);
|
||||
r->savedstate->definedhash = htab_create (100, cpp_string_hash,
|
||||
cpp_string_eq, NULL);
|
||||
cpp_string_eq, cpp_string_free);
|
||||
cpp_forall_identifiers (r, save_idents, r->savedstate);
|
||||
|
||||
/* Write out the list of defined identifiers. */
|
||||
@ -336,6 +346,8 @@ cpp_write_pch_deps (cpp_reader *r, FILE *f)
|
||||
return -1;
|
||||
}
|
||||
free (ss->definedstrs);
|
||||
free (ss->defs);
|
||||
htab_delete (ss->definedhash);
|
||||
|
||||
/* Free the saved state. */
|
||||
free (ss);
|
||||
|
Loading…
Reference in New Issue
Block a user