From: ppalka Date: Fri, 29 Jan 2016 01:51:03 +0000 (+0000) Subject: Fix cp_binding_level reuse logic X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e6d2fce0f539196b887e6ceb98f168be08485cad;p=thirdparty%2Fgcc.git Fix cp_binding_level reuse logic gcc/cp/ChangeLog: * name-lookup.c (begin_scope): After reusing a cp_binding_level structure, update free_binding_level before the structure's level_chain field gets cleared, not after. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232965 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 83a25f707789..2c2cdfb0d0cf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-01-29 Patrick Palka + + * name-lookup.c (begin_scope): After reusing a cp_binding_level + structure, update free_binding_level before the structure's + level_chain field gets cleared, not after. + 2016-01-28 Jason Merrill PR c++/67407 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index c52d236c649b..92d99aa53d3d 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1557,8 +1557,8 @@ begin_scope (scope_kind kind, tree entity) if (!ENABLE_SCOPE_CHECKING && free_binding_level) { scope = free_binding_level; - memset (scope, 0, sizeof (cp_binding_level)); free_binding_level = scope->level_chain; + memset (scope, 0, sizeof (cp_binding_level)); } else scope = ggc_cleared_alloc ();