From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13166 invoked by alias); 8 Oct 2002 08:19:00 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 13153 invoked from network); 8 Oct 2002 08:18:59 -0000 Received: from unknown (HELO hawk.mail.pas.earthlink.net) (207.217.120.22) by sources.redhat.com with SMTP; 8 Oct 2002 08:18:59 -0000 Received: from user-38ldk1d.dialup.mindspring.com ([209.86.208.45] helo=warlock.codesourcery.com) by hawk.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 17ypZq-0002bD-00; Tue, 08 Oct 2002 01:18:50 -0700 Date: Tue, 08 Oct 2002 03:02:00 -0000 From: Mark Mitchell To: Fergus Henderson , Andreas Jaeger cc: Andreas Tobler , gcc@gcc.gnu.org Subject: Re: Does gcc 3.2 branch bootstrap on RedHat 7.3? Message-ID: <820050000.1034064812@localhost> In-Reply-To: <20021005140148.GB4994@ceres.cs.mu.oz.au> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==========2624339384==========" X-SW-Source: 2002-10/txt/msg00456.txt.bz2 --==========2624339384========== Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 669 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 --==========2624339384========== Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 6177 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 --==========2624339384==========--