Reuse the saved_scope structures allocated by push_to_top_level
gcc/cp/ChangeLog: * name-lookup.c (free_saved_scope): New free list of saved_scope structures. (push_to_top_level): Attempt to reuse a saved_scope struct from free_saved_scope instead of allocating a new one each time. (pop_from_top_level_1): Chain the now-unused saved_scope structure onto free_saved_scope. From-SVN: r235351
This commit is contained in:
parent
617d8e43f9
commit
5c71225085
@ -1,3 +1,12 @@
|
||||
2016-04-21 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
* name-lookup.c (free_saved_scope): New free list of saved_scope
|
||||
structures.
|
||||
(push_to_top_level): Attempt to reuse a saved_scope struct
|
||||
from free_saved_scope instead of allocating a new one each time.
|
||||
(pop_from_top_level_1): Chain the now-unused saved_scope structure
|
||||
onto free_saved_scope.
|
||||
|
||||
2016-04-21 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/70540
|
||||
|
@ -6135,6 +6135,10 @@ store_class_bindings (vec<cp_class_binding, va_gc> *names,
|
||||
timevar_cond_stop (TV_NAME_LOOKUP, subtime);
|
||||
}
|
||||
|
||||
/* A chain of saved_scope structures awaiting reuse. */
|
||||
|
||||
static GTY((deletable)) struct saved_scope *free_saved_scope;
|
||||
|
||||
void
|
||||
push_to_top_level (void)
|
||||
{
|
||||
@ -6145,7 +6149,21 @@ push_to_top_level (void)
|
||||
bool need_pop;
|
||||
|
||||
bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
|
||||
s = ggc_cleared_alloc<saved_scope> ();
|
||||
|
||||
/* Reuse or create a new structure for this saved scope. */
|
||||
if (free_saved_scope != NULL)
|
||||
{
|
||||
s = free_saved_scope;
|
||||
free_saved_scope = s->prev;
|
||||
|
||||
vec<cxx_saved_binding, va_gc> *old_bindings = s->old_bindings;
|
||||
memset (s, 0, sizeof (*s));
|
||||
/* Also reuse the structure's old_bindings vector. */
|
||||
vec_safe_truncate (old_bindings, 0);
|
||||
s->old_bindings = old_bindings;
|
||||
}
|
||||
else
|
||||
s = ggc_cleared_alloc<saved_scope> ();
|
||||
|
||||
b = scope_chain ? current_binding_level : 0;
|
||||
|
||||
@ -6238,6 +6256,11 @@ pop_from_top_level_1 (void)
|
||||
current_function_decl = s->function_decl;
|
||||
cp_unevaluated_operand = s->unevaluated_operand;
|
||||
c_inhibit_evaluation_warnings = s->inhibit_evaluation_warnings;
|
||||
|
||||
/* Make this saved_scope structure available for reuse by
|
||||
push_to_top_level. */
|
||||
s->prev = free_saved_scope;
|
||||
free_saved_scope = s;
|
||||
}
|
||||
|
||||
/* Wrapper for pop_from_top_level_1. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user