From c740732f62c3784700fa3d819af4f408f768dd48 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sat, 13 Apr 2002 01:25:27 +0000 Subject: [PATCH] Revert these changes: 2002-04-06 Mark Mitchell PR c++/5571 * stor-layout.c (layout_decl): Reset the RTL for the decl. * decl.c (duplicate_decls): Do not copy the RTL for a variable declaration if the old variable had an incomplete type and the new variable does not. (complete_vars): Do not call layout_decl for completed variables. From-SVN: r52258 --- gcc/ChangeLog | 9 +++++++++ gcc/cp/ChangeLog | 7 +++++++ gcc/cp/decl.c | 22 ++++++++++++++-------- gcc/stor-layout.c | 5 ----- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25d865e4fc8..86df46da773 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-04-12 Mark Mitchell + + Revert these changes: + + 2002-04-06 Mark Mitchell + + PR c++/5571 + * stor-layout.c (layout_decl): Reset the RTL for the decl. + 2002-04-12 Richard Henderson * config.gcc (sparcv9-*-solaris2): Default to 32-bit code. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a9b70e9b1d3..c075ed0f1b1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-04-12 Mark Mitchell + + * decl.c (duplicate_decls): Do not copy the RTL for a variable + declaration if the old variable had an incomplete type and the new + variable does not. + (complete_vars): Do not call layout_decl for completed variables. + 2002-04-12 Richard Sandiford * decl.c (duplicate_decls): Don't try to unify an implicit typedef diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 93e63058b96..721cd63d414 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3610,15 +3610,23 @@ duplicate_decls (newdecl, olddecl) if (DECL_SECTION_NAME (newdecl) == NULL_TREE) DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl); - /* Keep the old rtl since we can safely use it. */ - COPY_DECL_RTL (olddecl, newdecl); - if (TREE_CODE (newdecl) == FUNCTION_DECL) { DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl) |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl); DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl); + /* Keep the old RTL. */ + COPY_DECL_RTL (olddecl, newdecl); + } + else if (TREE_CODE (newdecl) == VAR_DECL + && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl))) + { + /* Keep the old RTL. We cannot keep the old RTL if the old + declaration was for an incomplete object and the new + declaration is not since many attributes of the RTL will + change. */ + COPY_DECL_RTL (olddecl, newdecl); } } /* If cannot merge, then use the new type and qualifiers, @@ -14529,11 +14537,9 @@ complete_vars (type) if (same_type_p (type, TREE_PURPOSE (*list))) { tree var = TREE_VALUE (*list); - /* Make sure that the type of the VAR has been laid out. It - might not have been if the type of VAR is an array. */ - layout_type (TREE_TYPE (var)); - /* Lay out the variable itself. */ - layout_decl (var, 0); + /* Complete the type of the variable. The VAR_DECL itself + will be laid out in expand_expr. */ + complete_type (TREE_TYPE (var)); /* Remove this entry from the list. */ *list = TREE_CHAIN (*list); } diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index fbf5e4f42ad..baf26dddba1 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -461,11 +461,6 @@ layout_decl (decl, known_align) larger_than_size); } } - - /* If there was already RTL for this DECL, as for a variable with an - incomplete type whose type is completed later, update the RTL. */ - if (DECL_RTL_SET_P (decl)) - make_decl_rtl (decl, NULL); } /* Hook for a front-end function that can modify the record layout as needed -- 2.30.2