aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@gcc.gnu.org>2016-01-29 01:51:03 +0000
committerPatrick Palka <ppalka@gcc.gnu.org>2016-01-29 01:51:03 +0000
commite9f690692b275e87089aedd84cf3325985136e2e (patch)
tree590e1b14b8e42dbbf8b2efd9ee68b1eb77d4d817 /gcc
parent3a7d8a85a32cd3d1c2a9ac0de5e6d83260bc85e0 (diff)
downloadgcc-e9f690692b275e87089aedd84cf3325985136e2e.zip
gcc-e9f690692b275e87089aedd84cf3325985136e2e.tar.gz
gcc-e9f690692b275e87089aedd84cf3325985136e2e.tar.bz2
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. From-SVN: r232965
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/name-lookup.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 83a25f7..2c2cdfb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2016-01-29 Patrick Palka <ppalka@gcc.gnu.org>
+
+ * 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 <jason@redhat.com>
PR c++/67407
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index c52d236..92d99aa 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<cp_binding_level> ();