This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Does gcc 3.2 branch bootstrap on RedHat 7.3?
- From: Mark Mitchell <mark at codesourcery dot com>
- To: Fergus Henderson <fjh at cs dot mu dot OZ dot AU>, Andreas Jaeger <aj at suse dot de>
- Cc: Andreas Tobler <toa at pop dot agri dot ch>, gcc at gcc dot gnu dot org
- Date: Tue, 08 Oct 2002 01:13:32 -0700
- Subject: Re: Does gcc 3.2 branch bootstrap on RedHat 7.3?
Gentlemen --
I am confused as to why I did not see that problem.
I apologize for causing so much chaos. I appreciate your reverting the
patch.
I am still stuck on the other end of a modem link; my connection
went awry and I am getting to spend the night in Phoenix.
I am virtually positive that the attached will be the fix, relative to
current mainline sources, and am doing the full bootstrap thing as we
speak. (There was a switch fall-through that I did not see.)
Hopefully I will get this checked in before my morning flight.
Apologetically,
--
Mark Mitchell mark@codesourcery.com
CodeSourcery, LLC http://www.codesourcery.com
Index: decl2.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v
retrieving revision 1.565
diff -c -5 -p -r1.565 decl2.c
*** decl2.c 7 Oct 2002 09:49:18 -0000 1.565
--- decl2.c 8 Oct 2002 08:14:01 -0000
*************** finish_anon_union (anon_union_decl)
*** 1380,1409 ****
{
error ("namespace-scope anonymous aggregates must be static");
return;
}
! main_decl = build_anon_union_vars (anon_union_decl,
! &DECL_ANON_UNION_ELEMS (anon_union_decl),
! static_p, external_p);
!
! if (main_decl == NULL_TREE)
{
! warning ("anonymous aggregate with no members");
! return;
! }
! if (static_p)
! {
! make_decl_rtl (main_decl, 0);
! COPY_DECL_RTL (main_decl, anon_union_decl);
! expand_anon_union_decl (anon_union_decl,
! NULL_TREE,
! DECL_ANON_UNION_ELEMS (anon_union_decl));
}
! else
! add_decl_stmt (anon_union_decl);
}
/* Finish processing a builtin type TYPE. It's name is NAME,
its fields are in the array FIELDS. LEN is the number of elements
in FIELDS minus one, or put another way, it is the maximum subscript
--- 1380,1414 ----
{
error ("namespace-scope anonymous aggregates must be static");
return;
}
! if (!processing_template_decl)
{
! main_decl
! = build_anon_union_vars (anon_union_decl,
! &DECL_ANON_UNION_ELEMS (anon_union_decl),
! static_p, external_p);
!
! if (main_decl == NULL_TREE)
! {
! warning ("anonymous aggregate with no members");
! return;
! }
! if (static_p)
! {
! make_decl_rtl (main_decl, 0);
! COPY_DECL_RTL (main_decl, anon_union_decl);
! expand_anon_union_decl (anon_union_decl,
! NULL_TREE,
! DECL_ANON_UNION_ELEMS (anon_union_decl));
! return;
! }
}
!
! add_decl_stmt (anon_union_decl);
}
/* Finish processing a builtin type TYPE. It's name is NAME,
its fields are in the array FIELDS. LEN is the number of elements
in FIELDS minus one, or put another way, it is the maximum subscript
Index: pt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/pt.c,v
retrieving revision 1.622
diff -c -5 -p -r1.622 pt.c
*** pt.c 7 Oct 2002 09:49:18 -0000 1.622
--- pt.c 8 Oct 2002 08:14:34 -0000
*************** tsubst_decl (t, args, type, complain)
*** 6132,6141 ****
--- 6132,6143 ----
r = spec;
break;
}
r = copy_decl (t);
+ if (TREE_CODE (r) == VAR_DECL)
+ type = complete_type (type);
TREE_TYPE (r) = type;
c_apply_type_quals_to_decl (cp_type_quals (type), r);
DECL_CONTEXT (r) = ctx;
/* Clear out the mangled name and RTL for the instantiation. */
SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
*************** tsubst_decl (t, args, type, complain)
*** 6171,6180 ****
--- 6173,6184 ----
register_local_specialization (r, t);
TREE_CHAIN (r) = NULL_TREE;
if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
cp_error_at ("instantiation of `%D' as type `%T'", r, type);
+ /* Compute the size, alignment, etc. of R. */
+ layout_decl (r, 0);
}
break;
default:
abort ();
*************** tsubst_expr (t, args, complain, in_decl)
*** 7422,7456 ****
{
init = DECL_INITIAL (decl);
decl = tsubst (decl, args, complain, in_decl);
if (decl != error_mark_node)
{
- if (TREE_CODE (decl) != TYPE_DECL)
- /* Make sure the type is instantiated now. */
- complete_type (TREE_TYPE (decl));
if (init)
DECL_INITIAL (decl) = error_mark_node;
/* By marking the declaration as instantiated, we avoid
trying to instantiate it. Since instantiate_decl can't
handle local variables, and since we've already done
all that needs to be done, that's the right thing to
do. */
if (TREE_CODE (decl) == VAR_DECL)
DECL_TEMPLATE_INSTANTIATED (decl) = 1;
! maybe_push_decl (decl);
! if (DECL_PRETTY_FUNCTION_P (decl))
{
! /* For __PRETTY_FUNCTION__ we have to adjust the
! initializer. */
! const char *const name
! = cxx_printable_name (current_function_decl, 2);
! init = cp_fname_init (name);
! TREE_TYPE (decl) = TREE_TYPE (init);
}
- else
- init = tsubst_expr (init, args, complain, in_decl);
- cp_finish_decl (decl, init, NULL_TREE, 0);
}
}
/* A DECL_STMT can also be used as an expression, in the condition
clause of an if/for/while construct. If we aren't followed by
--- 7426,7464 ----
{
init = DECL_INITIAL (decl);
decl = tsubst (decl, args, complain, in_decl);
if (decl != error_mark_node)
{
if (init)
DECL_INITIAL (decl) = error_mark_node;
/* By marking the declaration as instantiated, we avoid
trying to instantiate it. Since instantiate_decl can't
handle local variables, and since we've already done
all that needs to be done, that's the right thing to
do. */
if (TREE_CODE (decl) == VAR_DECL)
DECL_TEMPLATE_INSTANTIATED (decl) = 1;
! if (TREE_CODE (decl) == VAR_DECL
! && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
! /* Anonymous aggregates are a special case. */
! finish_anon_union (decl);
! else
{
! maybe_push_decl (decl);
! if (DECL_PRETTY_FUNCTION_P (decl))
! {
! /* For __PRETTY_FUNCTION__ we have to adjust the
! initializer. */
! const char *const name
! = cxx_printable_name (current_function_decl, 2);
! init = cp_fname_init (name);
! TREE_TYPE (decl) = TREE_TYPE (init);
! }
! else
! init = tsubst_expr (init, args, complain, in_decl);
! cp_finish_decl (decl, init, NULL_TREE, 0);
}
}
}
/* A DECL_STMT can also be used as an expression, in the condition
clause of an if/for/while construct. If we aren't followed by