re PR debug/44610 (VTA produces wrong variable location information)
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 25 Jun 2010 21:11:32 +0000 (21:11 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 25 Jun 2010 21:11:32 +0000 (21:11 +0000)
PR debug/44610
* simplify-rtx.c (delegitimize_mem_from_attrs): Don't use a base
address if the offset is unknown.

From-SVN: r161413

gcc/ChangeLog
gcc/simplify-rtx.c

index 2ce7507..5b08e5d 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-25  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/44610
+       * simplify-rtx.c (delegitimize_mem_from_attrs): Don't use a base
+       address if the offset is unknown.
+
 2010-06-25  Douglas B Rupp  <rupp@gnat.com>
 
        * dwarf2out.c (dwarf2out_vms_debug_main_pointer): New function.
index be63198..3a30e88 100644 (file)
@@ -208,10 +208,11 @@ avoid_constant_pool_reference (rtx x)
 rtx
 delegitimize_mem_from_attrs (rtx x)
 {
+  /* MEMs without MEM_OFFSETs may have been offset, so we can't just
+     use their base addresses as equivalent.  */
   if (MEM_P (x)
       && MEM_EXPR (x)
-      && (!MEM_OFFSET (x)
-         || GET_CODE (MEM_OFFSET (x)) == CONST_INT))
+      && MEM_OFFSET (x))
     {
       tree decl = MEM_EXPR (x);
       enum machine_mode mode = GET_MODE (x);
@@ -264,8 +265,7 @@ delegitimize_mem_from_attrs (rtx x)
        {
          rtx newx;
 
-         if (MEM_OFFSET (x))
-           offset += INTVAL (MEM_OFFSET (x));
+         offset += INTVAL (MEM_OFFSET (x));
 
          newx = DECL_RTL (decl);