This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: c++/8067: g++ 3.2 internal error: Segmentation fault
- From: Pop Sébastian <pop at gauvain dot u-strasbg dot fr>
- To: Reichelt <reichelt at igpm dot rwth-aachen dot de>
- Cc: gcc-gnats at gcc dot gnu dot org, gcc-bugs at gcc dot gnu dot org, nobody at gcc dot gnu dot org,y_fedor at ciam dot ru, gcc-patches at gcc dot gnu dot org
- Date: Mon, 30 Sep 2002 21:58:33 +0200
- Subject: Re: c++/8067: g++ 3.2 internal error: Segmentation fault
- References: <200209301735.TAA97382@numa6.igpm.rwth-aachen.de> <20020930172844.GA5590@gauvain.u-strasbg.fr>
Bootstrapped on x86.
(configured with --enable-languages=c,c++)
Ok for closing c++/8067 ?
Sebastian
2002-09-30 Sebastian Pop <s.pop@laposte.net>
* decl.c (maybe_inject_for_scope_var): Handle the case when
IDENTIFIER_BINDING is NULL.
Index: decl.c
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/cp/decl.c,v
retrieving revision 1.937
diff -d -c -p -r1.937 decl.c
*** decl.c 29 Sep 2002 11:53:48 -0000 1.937
--- decl.c 30 Sep 2002 18:03:41 -0000
*************** maybe_inject_for_scope_var (decl)
*** 8006,8022 ****
Otherwise, we need to preserve the temp slot for decl to last
into the outer binding level. */
! tree outer_binding
! = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
!
! if (outer_binding && BINDING_LEVEL (outer_binding) == outer
! && (TREE_CODE (BINDING_VALUE (outer_binding))
! == VAR_DECL)
! && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
{
! BINDING_VALUE (outer_binding)
! = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
! current_binding_level->is_for_scope = 0;
}
else if (DECL_IN_MEMORY_P (decl))
preserve_temp_slots (DECL_RTL (decl));
--- 8006,8026 ----
Otherwise, we need to preserve the temp slot for decl to last
into the outer binding level. */
! tree ib, outer_binding;
! ib = IDENTIFIER_BINDING (DECL_NAME (decl));
! if (ib)
{
! outer_binding = TREE_CHAIN (ib);
!
! if (outer_binding && BINDING_LEVEL (outer_binding) == outer
! && (TREE_CODE (BINDING_VALUE (outer_binding))
! == VAR_DECL)
! && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
! {
! BINDING_VALUE (outer_binding)
! = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
! current_binding_level->is_for_scope = 0;
! }
}
else if (DECL_IN_MEMORY_P (decl))
preserve_temp_slots (DECL_RTL (decl));
// { dg-do compile }
// Copyright (C) 2002 Free Software Foundation, Inc.
// Contributed by Sebastian Pop 30 Sep 2002 <s.pop@laposte.net>
void foo()
{
for ( __PRETTY_FUNCTION__ ; ; )
;
}