OSDN Git Service

PR debug/47283
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Mar 2011 16:06:33 +0000 (16:06 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Mar 2011 16:06:33 +0000 (16:06 +0000)
* cfgexpand.c (expand_debug_expr) <case MEM_REF>: If MEM_REF
first operand is not is_gimple_mem_ref_addr, try to fold it.
If the operand still isn't is_gimple_mem_ref_addr, clear
MEM_EXPR on op0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170654 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgexpand.c

index e40f40e..5d524d5 100644 (file)
@@ -1,3 +1,11 @@
+2011-03-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/47283
+       * cfgexpand.c (expand_debug_expr) <case MEM_REF>: If MEM_REF
+       first operand is not is_gimple_mem_ref_addr, try to fold it.
+       If the operand still isn't is_gimple_mem_ref_addr, clear
+       MEM_EXPR on op0.
+
 2011-03-03  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/47283
index ecfd1a5..059c5b2 100644 (file)
@@ -2578,6 +2578,15 @@ expand_debug_expr (tree exp)
       }
 
     case MEM_REF:
+      if (!is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
+       {
+         tree newexp = fold_binary (MEM_REF, TREE_TYPE (exp),
+                                    TREE_OPERAND (exp, 0),
+                                    TREE_OPERAND (exp, 1));
+         if (newexp)
+           return expand_debug_expr (newexp);
+       }
+      /* FALLTHROUGH */
     case INDIRECT_REF:
       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
       if (!op0)
@@ -2611,6 +2620,9 @@ expand_debug_expr (tree exp)
 
       op0 = gen_rtx_MEM (mode, op0);
       set_mem_attributes (op0, exp, 0);
+      if (TREE_CODE (exp) == MEM_REF
+         && !is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
+       set_mem_expr (op0, NULL_TREE);
       set_mem_addr_space (op0, as);
 
       return op0;