aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 81c77f7..4368817 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -4875,7 +4875,7 @@ replace_stmt_with_simplification (gimple_stmt_iterator *gsi,
/* Canonicalize MEM_REFs invariant address operand after propagation. */
static bool
-maybe_canonicalize_mem_ref_addr (tree *t)
+maybe_canonicalize_mem_ref_addr (tree *t, bool is_debug = false)
{
bool res = false;
tree *orig_t = t;
@@ -4939,7 +4939,11 @@ maybe_canonicalize_mem_ref_addr (tree *t)
base = get_addr_base_and_unit_offset (TREE_OPERAND (addr, 0),
&coffset);
if (!base)
- gcc_unreachable ();
+ {
+ if (is_debug)
+ return false;
+ gcc_unreachable ();
+ }
TREE_OPERAND (*t, 0) = build_fold_addr_expr (base);
TREE_OPERAND (*t, 1) = int_const_binop (PLUS_EXPR,
@@ -5119,7 +5123,7 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, tree (*valueize) (tree))
if (*val
&& (REFERENCE_CLASS_P (*val)
|| TREE_CODE (*val) == ADDR_EXPR)
- && maybe_canonicalize_mem_ref_addr (val))
+ && maybe_canonicalize_mem_ref_addr (val, true))
changed = true;
}
break;