From 71f3a3f5171d29dc3625fa7556c5732aa6b26241 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 3 Mar 2011 17:06:33 +0100 Subject: [PATCH] re PR debug/47283 (ICE in refs_may_alias_p_1, at tree-ssa-alias.c) PR debug/47283 * cfgexpand.c (expand_debug_expr) : 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 | 8 ++++++++ gcc/cfgexpand.c | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e40f40e435c..5d524d50f9a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-03-03 Jakub Jelinek + + PR debug/47283 + * cfgexpand.c (expand_debug_expr) : 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 PR middle-end/47283 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index ecfd1a50f39..059c5b2725c 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -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; -- 2.30.2