aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-06-19 19:27:01 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-06-19 19:27:01 -0400
commit6bc85e79525c2b226121dbcc8e15824f7d44f055 (patch)
treec07c8e60173ae55dbf015fef35e583083f8534c3
parent4ff0a1d8d927b110c0581da7339a23af61c7a5ae (diff)
downloadgcc-6bc85e79525c2b226121dbcc8e15824f7d44f055.zip
gcc-6bc85e79525c2b226121dbcc8e15824f7d44f055.tar.gz
gcc-6bc85e79525c2b226121dbcc8e15824f7d44f055.tar.bz2
(integrate_decl_tree): Only set DECL_ABSTRACT_ORIGIN if the decl
returned by pushdecl is the one we started with. From-SVN: r10018
-rw-r--r--gcc/integrate.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 6424804..525977a 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1968,6 +1968,7 @@ integrate_decl_tree (let, level, map)
for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
{
tree d;
+ tree newd;
push_obstacks_nochange ();
saveable_allocation ();
@@ -1986,13 +1987,19 @@ integrate_decl_tree (let, level, map)
}
/* These args would always appear unused, if not for this. */
TREE_USED (d) = 1;
- /* Prevent warning for shadowing with these. */
- DECL_ABSTRACT_ORIGIN (d) = t;
if (DECL_LANG_SPECIFIC (d))
copy_lang_decl (d);
- pushdecl (d);
+ newd = pushdecl (d);
+
+ /* If the decl we get back is the copy of 't' that we started with,
+ then set the DECL_ABSTRACT_ORIGIN. Otherwise, we must have a
+ duplicate decl, and we got the older one back. In that case, setting
+ DECL_ABSTRACT_ORIGIN is not appropriate. */
+ if (newd == d)
+ /* Prevent warning for shadowing with these. */
+ DECL_ABSTRACT_ORIGIN (d) = t;
}
for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t))