This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]