summaryrefslogtreecommitdiff
path: root/gcc/cp/decl.c
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-13 01:25:27 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-13 01:25:27 +0000
commitb3609646e534aee4d7296c6595b2a8564ac0da7d (patch)
treede6cd1c98fbd33ee4be0c84964ac99948d1aa96f /gcc/cp/decl.c
parentf33246617bb91908d818d0288cd835ff3c299d64 (diff)
downloadgcc-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.c22
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);
}