diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-13 01:25:27 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-13 01:25:27 +0000 |
commit | b3609646e534aee4d7296c6595b2a8564ac0da7d (patch) | |
tree | de6cd1c98fbd33ee4be0c84964ac99948d1aa96f /gcc/cp/decl.c | |
parent | f33246617bb91908d818d0288cd835ff3c299d64 (diff) | |
download | gcc-b3609646e534aee4d7296c6595b2a8564ac0da7d.tar.gz |
Revert these changes:
2002-04-06 Mark Mitchell <mark@codesourcery.com>
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52258 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r-- | gcc/cp/decl.c | 22 |
1 files changed, 14 insertions, 8 deletions
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); } |