Committed as obvious. Richard.
2015-11-25 Richard Biener <rguent...@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. Index: gcc/tree-vect-data-refs.c =================================================================== --- gcc/tree-vect-data-refs.c (revision 230856) +++ gcc/tree-vect-data-refs.c (working copy) @@ -2769,7 +2769,8 @@ vect_analyze_data_ref_accesses (vec_info /* 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 Index: gcc/testsuite/gcc.dg/torture/pr68517.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr68517.c (revision 0) +++ gcc/testsuite/gcc.dg/torture/pr68517.c (working copy) @@ -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) { }; +}