summaryrefslogtreecommitdiff
path: root/gcc/integrate.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1997-12-12 16:06:57 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1997-12-12 16:06:57 +0000
commitd7672536f0bee6e86ab38a757f8ab6e08c5bf023 (patch)
treee6582ebaacea2958ae8268ac9eef592b925f240a /gcc/integrate.c
parent5d9a3b387e9a7b7ee876b365f6fe726f2d5cb231 (diff)
downloadgcc-d7672536f0bee6e86ab38a757f8ab6e08c5bf023.tar.gz
* integrate.c (initialize_for_inline): In DECL_RTL of a PARM_DECL,
look inside a (mem (addressof (mem ...))). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@17075 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/integrate.c')
-rw-r--r--gcc/integrate.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 6d27e495765..70aaf16f2e6 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -276,6 +276,13 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
{
rtx p = DECL_RTL (parms);
+ /* If we have (mem (addressof (mem ...))), use the inner MEM since
+ otherwise the copy_rtx call below will not unshare the MEM since
+ it shares ADDRESSOF. */
+ if (GET_CODE (p) == MEM && GET_CODE (XEXP (p, 0)) == ADDRESSOF
+ && GET_CODE (XEXP (XEXP (p, 0), 0)) == MEM)
+ p = XEXP (XEXP (p, 0), 0);
+
if (GET_CODE (p) == MEM && copy)
{
/* Copy the rtl so that modifications of the addresses