From: Richard Biener Date: Wed, 25 Nov 2015 09:22:47 +0000 (+0000) Subject: re PR tree-optimization/68517 (ICE in tree-vect-data-refs.c:2751) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=514c0e7c12d44576796d79079b1ba20844f047b9;p=gcc.git re PR tree-optimization/68517 (ICE in tree-vect-data-refs.c:2751) 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. From-SVN: r230858 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ec9ab7008f..ec493af77a8 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 ac85edf1b99..78e09048157 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 00000000000..5093d988f82 --- /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 d788b59dc7b..62e61e04a75 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