diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 44580fc15e2e..ac9a03c83074 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-04-27 Richard Biener + + PR middle-end/80533 + * emit-rtl.c (set_mem_attributes_minus_bitpos): When + stripping ARRAY_REFs from MEM_EXPR make sure we're not + keeping a reference to a trailing array. + 2017-04-27 Richard Biener PR middle-end/80539 diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 0d25d4ec17ec..d7aba8864bea 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1954,7 +1954,10 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, while (TREE_CODE (t2) == ARRAY_REF); if (DECL_P (t2) - || TREE_CODE (t2) == COMPONENT_REF) + || (TREE_CODE (t2) == COMPONENT_REF + /* For trailing arrays t2 doesn't have a size that + covers all valid accesses. */ + && ! array_at_struct_end_p (t, false))) { attrs.expr = t2; attrs.offset_known_p = false;