From: rguenth Date: Wed, 25 Nov 2015 09:22:47 +0000 (+0000) Subject: 2015-11-25 Richard Biener X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3148a974dde6df731b26b58cfc721aa79b2b2d9c;p=thirdparty%2Fgcc.git 2015-11-25 Richard Biener 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230858 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ec9ab7008fb..ec493af77a83 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-11-25 Richard Biener + + PR tree-optimization/68517 + * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): + Properly handle zero-sized types. + 2015-11-24 Jan Hubicka * ipa-inline-analysis.c: Include gimplify.h diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac85edf1b996..78e09048157b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-11-25 Richard Biener + + PR tree-optimization/68517 + * gcc.dg/torture/pr68517.c: New testcase. + 2015-11-25 Jakub Jelinek 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 000000000000..5093d988f825 --- /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 d788b59dc7b5..62e61e04a75b 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