This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
fix debug/13841
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 13 Oct 2004 16:27:00 -0700
- Subject: fix debug/13841
The problem exposed by this pr is that we hadn't gotten around to
doing virtual base pointer elimination on the CONCAT that held the
pieces of the complex.
Fixed trivially. Tested on alpha-linux.
r~
* function.c (instantiate_decl): Recurse for CONCAT.
Index: function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.483.4.18
diff -c -p -d -r1.483.4.18 function.c
*** function.c 15 Sep 2004 05:37:46 -0000 1.483.4.18
--- function.c 13 Oct 2004 23:16:40 -0000
*************** instantiate_decl (rtx x, HOST_WIDE_INT s
*** 3651,3660 ****
enum machine_mode mode;
rtx addr;
/* If this is not a MEM, no need to do anything. Similarly if the
address is a constant or a register that is not a virtual register. */
!
! if (x == 0 || GET_CODE (x) != MEM)
return;
addr = XEXP (x, 0);
--- 3651,3670 ----
enum machine_mode mode;
rtx addr;
+ if (x == 0)
+ return;
+
+ /* If this is a CONCAT, recurse for the pieces. */
+ if (GET_CODE (x) == CONCAT)
+ {
+ instantiate_decl (XEXP (x, 0), size / 2, valid_only);
+ instantiate_decl (XEXP (x, 1), size / 2, valid_only);
+ return;
+ }
+
/* If this is not a MEM, no need to do anything. Similarly if the
address is a constant or a register that is not a virtual register. */
! if (GET_CODE (x) != MEM)
return;
addr = XEXP (x, 0);