re PR tree-optimization/68517 (ICE in tree-vect-data-refs.c:2751)
authorRichard Biener <rguenther@suse.de>
Wed, 25 Nov 2015 09:22:47 +0000 (09:22 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 25 Nov 2015 09:22:47 +0000 (09:22 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr68517.c [new file with mode: 0644]
gcc/tree-vect-data-refs.c

index 3ec9ab7008fbf423fedbd161bc07fc22f1c9aa67..ec493af77a83334e39124e18cff85769c8cdc9ee 100644 (file)
@@ -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
index ac85edf1b996ed94bb70be2dd965921610437fdc..78e09048157b9fe68d45e09f5d2a4a31677df9d3 100644 (file)
@@ -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 (file)
index 0000000..5093d98
--- /dev/null
@@ -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) { };
+}
index d788b59dc7b5659b9f991ded054828eb2d437927..62e61e04a75bab21dd3abe80b04e3b0093a42c1a 100644 (file)
@@ -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