]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Modification to define_label and finish_case_label in decl.c to handle
authorWill Cohen <wcohen@redhat.com>
Tue, 5 Dec 2000 16:21:54 +0000 (16:21 +0000)
committerWilliam Cohen <wcohen@gcc.gnu.org>
Tue, 5 Dec 2000 16:21:54 +0000 (16:21 +0000)
scoping correctly.

From-SVN: r38041

gcc/cp/ChangeLog
gcc/cp/decl.c

index 10fff7f054452371a07cddb5c2c48abceb044af8..7358f65cbeb44c6a56bc2f2977878048c5f5e76d 100644 (file)
@@ -1,3 +1,9 @@
+2000-12-05  Will Cohen  <wcohen@redhat.com>
+
+       * decl.c (finish_case_label): Cleared
+       more_cleanups_ok in surrounding function scopes.
+       (define_label): Likewise.
+
 2000-12-05  Nathan Sidwell  <nathan@codesourcery.com>
 
        * cp-tree.h (IDENTIFIER_VIRTUAL_P): Document.
index 24b24dfbe301edd6f8280333e7ac9e93d0c867cb..d68c300e2bca25e2a55d1a16d12d087775a59434 100644 (file)
@@ -5068,14 +5068,16 @@ define_label (filename, line, name)
 {
   tree decl = lookup_label (name);
   struct named_label_list *ent;
+  register struct binding_level *p;
 
   for (ent = named_labels; ent; ent = ent->next)
     if (ent->label_decl == decl)
       break;
 
-  /* After labels, make any new cleanups go into their
+  /* After labels, make any new cleanups in the function go into their
      own new (temporary) binding contour.  */
-  current_binding_level->more_cleanups_ok = 0;
+  for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
+    p->more_cleanups_ok = 0;
 
   if (name == get_identifier ("wchar_t"))
     cp_pedwarn ("label named wchar_t");
@@ -5161,6 +5163,7 @@ finish_case_label (low_value, high_value)
      tree high_value;
 {
   tree cond;
+  register struct binding_level *p;
 
   if (! switch_stack)
     {
@@ -5194,9 +5197,10 @@ finish_case_label (low_value, high_value)
 
   check_switch_goto (switch_stack->level);
 
-  /* After labels, make any new cleanups go into their
+  /* After labels, make any new cleanups in the function go into their
      own new (temporary) binding contour.  */
-  current_binding_level->more_cleanups_ok = 0;
+  for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
+    p->more_cleanups_ok = 0;
   current_function_return_value = NULL_TREE;
 }
 \f