This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]