diff options
author | Richard Biener <rguenther@suse.de> | 2015-11-25 09:22:47 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-11-25 09:22:47 +0000 |
commit | 514c0e7c12d44576796d79079b1ba20844f047b9 (patch) | |
tree | b4495ffa55e2de4c4b7afe9ee070b2547b857131 /gcc | |
parent | 80d39568c54771107ee76d3559d7e4d888bc29a0 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr68517.c | 26 | ||||
-rw-r--r-- | gcc/tree-vect-data-refs.c | 3 |
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 |