]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa: Fix ICE in build_vector_type [PR93780]
authorJakub Jelinek <jakub@redhat.com>
Tue, 18 Feb 2020 08:07:15 +0000 (09:07 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 18 Feb 2020 08:07:15 +0000 (09:07 +0100)
The following testcase ICEs, because execute_update_addresses_taken attempts
to create a VECTOR_TYPE with non-power of 2 number of elts.
Fixed by guarding it with the corresponding predicate.

2020-02-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93780
* tree-ssa.c (non_rewritable_lvalue_p): Check valid_vector_subparts_p
before calling build_vector_type.
(execute_update_addresses_taken): Likewise.

* gcc.dg/pr93780.c: New test.

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr93780.c [new file with mode: 0644]
gcc/tree-ssa.c

index e8eaf7efd12fc10fa9f3260eb31eb21ec7a0d89a..99d32c04bfbb50a4e4f60a1651a1044d999cc5f5 100644 (file)
@@ -1,5 +1,10 @@
 2020-02-18  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/93780
+       * tree-ssa.c (non_rewritable_lvalue_p): Check valid_vector_subparts_p
+       before calling build_vector_type.
+       (execute_update_addresses_taken): Likewise.
+
        PR driver/93796
        * params.opt (-param=ipa-max-switch-predicate-bounds=): Fix help
        typo, functoin -> function.
index 0e7d7bcc4b81f44c8ef80eae7ffd7aa2e3dd70a5..8f2c5b0795e0ad5f6b1a6eb35fec45a3e6c90f82 100644 (file)
@@ -1,9 +1,14 @@
+2020-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/93780
+       * gcc.dg/pr93780.c: New test.
+
 2020-02-17  David Malcolm  <dmalcolm@redhat.com>
 
        PR analyzer/93775
        * gcc.dg/analyzer/20020129-1.c: New test.
 
-2020-02-17  Alexandre Oliva <oliva@adacore.com>
+2020-02-17  Alexandre Oliva  <oliva@adacore.com>
 
        * gcc.dg/tls/emutls-3.c: New, combining emutls-2.c and
        thr-init-2.c into an execution test with explicitly common
diff --git a/gcc/testsuite/gcc.dg/pr93780.c b/gcc/testsuite/gcc.dg/pr93780.c
new file mode 100644 (file)
index 0000000..d476df6
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR tree-optimization/93780 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-mavx" { target avx } } */
+
+typedef float V __attribute__((vector_size (32)));
+
+float
+foo (void)
+{
+  const float init[6] = {};
+  V v = {};
+  __builtin_memcpy (&v, init, sizeof (init));
+  return v[0];
+}
index dbff604514574959072ba675b8b59aca62728b0f..344f32d69cf2a722d85b32d4ee870420f82f41fc 100644 (file)
@@ -1550,7 +1550,8 @@ non_rewritable_lvalue_p (tree lhs)
              && multiple_p (lhs_bits,
                             tree_to_uhwi
                               (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl)))),
-                            &nelts))
+                            &nelts)
+             && valid_vector_subparts_p (nelts))
            {
              if (known_eq (nelts, 1u))
                return false;
@@ -1925,7 +1926,8 @@ execute_update_addresses_taken (void)
                                             (TYPE_SIZE (TREE_TYPE
                                                           (TREE_TYPE (sym)))),
                                           &nelts)
-                           && maybe_ne (nelts, 1u))
+                           && maybe_ne (nelts, 1u)
+                           && valid_vector_subparts_p (nelts))
                          temtype = build_vector_type (temtype, nelts);
                        tree tem = make_ssa_name (temtype);
                        gimple *pun