aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-11-25 09:22:47 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-11-25 09:22:47 +0000
commit514c0e7c12d44576796d79079b1ba20844f047b9 (patch)
treeb4495ffa55e2de4c4b7afe9ee070b2547b857131 /gcc
parent80d39568c54771107ee76d3559d7e4d888bc29a0 (diff)
downloadgcc-514c0e7c12d44576796d79079b1ba20844f047b9.zip
gcc-514c0e7c12d44576796d79079b1ba20844f047b9.tar.gz
gcc-514c0e7c12d44576796d79079b1ba20844f047b9.tar.bz2
re PR tree-optimization/68517 (ICE in tree-vect-data-refs.c:2751)
2015-11-25 Richard Biener <rguenther@suse.de> PR tree-optimization/68517 * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Properly handle zero-sized types. * gcc.dg/torture/pr68517.c: New testcase. From-SVN: r230858
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr68517.c26
-rw-r--r--gcc/tree-vect-data-refs.c3
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3ec9ab7..ec493af 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/68517
+ * tree-vect-data-refs.c (vect_analyze_data_ref_accesses):
+ Properly handle zero-sized types.
+
2015-11-24 Jan Hubicka <hubicka@ucw.cz>
* ipa-inline-analysis.c: Include gimplify.h
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ac85edf..78e0904 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/68517
+ * gcc.dg/torture/pr68517.c: New testcase.
+
2015-11-25 Jakub Jelinek <jakub@redhat.com>
PR target/67089
diff --git a/gcc/testsuite/gcc.dg/torture/pr68517.c b/gcc/testsuite/gcc.dg/torture/pr68517.c
new file mode 100644
index 0000000..5093d98
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr68517.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+
+typedef struct
+{
+} st1;
+
+typedef struct
+{
+ volatile int c;
+} __attribute__ ((aligned (4))) st2;
+
+struct s4
+{
+ st1 f1;
+ st2 f2;
+ st1 f3;
+};
+
+struct s3;
+
+void
+foo (struct s3 *arg, struct s4 *arg1)
+{
+ arg1->f1 = (st1) { };
+ arg1->f3 = (st1) { };
+}
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index d788b59..62e61e0 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -2769,7 +2769,8 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
/* If init_b == init_a + the size of the type * k, we have an
interleaving, and DRA is accessed before DRB. */
HOST_WIDE_INT type_size_a = tree_to_uhwi (sza);
- if ((init_b - init_a) % type_size_a != 0)
+ if (type_size_a == 0
+ || (init_b - init_a) % type_size_a != 0)
break;
/* If we have a store, the accesses are adjacent. This splits