aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-04-27 12:34:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-04-27 12:34:45 +0000
commit12ead254ee6dbb32760593207417ca2ebcc2ef59 (patch)
tree56d21089cf58902f3d22508f88dd407ea4c90eef /gcc
parent3b2249aa1bb3f0240d45130a185c477c4530dc5a (diff)
downloadgcc-12ead254ee6dbb32760593207417ca2ebcc2ef59.zip
gcc-12ead254ee6dbb32760593207417ca2ebcc2ef59.tar.gz
gcc-12ead254ee6dbb32760593207417ca2ebcc2ef59.tar.bz2
re PR middle-end/80533 (Alias analysis of zero length array does not recognize accesses beyond end of array)
2017-04-27 Richard Biener <rguenther@suse.de> 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. From-SVN: r247327
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/emit-rtl.c5
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 44580fc..ac9a03c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2017-04-27 Richard Biener <rguenther@suse.de>
+ 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 <rguenther@suse.de>
+
PR middle-end/80539
* tree-chrec.c (chrec_fold_plus_poly_poly): Deal with not
being in loop-closed SSA form conservatively.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 0d25d4e..d7aba88 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;