re PR debug/47283 (ICE in refs_may_alias_p_1, at tree-ssa-alias.c)
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Mar 2011 16:06:33 +0000 (17:06 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 3 Mar 2011 16:06:33 +0000 (17:06 +0100)
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.

From-SVN: r170654

gcc/ChangeLog
gcc/cfgexpand.c

index e40f40e435c87e40e2c96590f89df106af2e7b7f..5d524d50f9a0bd1a0c5e71bd9078ea466e78cc79 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 ecfd1a50f39fe01dfce31d4bdf40aff05650e49e..059c5b2725c1594d738072c49da43c1ff9a8ed28 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;