re PR middle-end/69915 (ICE: SIGSEGV with -O -ftracer with broken backtrace)
authorJakub Jelinek <jakub@redhat.com>
Wed, 24 Feb 2016 13:54:39 +0000 (14:54 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 24 Feb 2016 13:54:39 +0000 (14:54 +0100)
PR middle-end/69915
* tree.c (build_vector_from_ctor): Fix handling of VECTOR_CST
elements.

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

From-SVN: r233664

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

index 9f6ae5e1e1a6513080d0e2fbd6c92dcb580e3888..53376ae27bb4865a0fedb3e76b4b6800e8ddd367 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/69915
+       * tree.c (build_vector_from_ctor): Fix handling of VECTOR_CST
+       elements.
+
 2016-02-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR rtl-optimization/69886
index 710dd11d7704d4ecdc48957d98363b4c659f7b5f..5b758dc879f47caef2cd49d86c2829a4e0599887 100644 (file)
@@ -1,3 +1,8 @@
+2016-02-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/69915
+       * gcc.dg/pr69915.c: New test.
+
 2016-02-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR rtl-optimization/69886
diff --git a/gcc/testsuite/gcc.dg/pr69915.c b/gcc/testsuite/gcc.dg/pr69915.c
new file mode 100644 (file)
index 0000000..4c60c59
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR middle-end/69915 */
+/* { dg-do compile } */
+/* { dg-options "-O -ftracer" } */
+
+typedef unsigned short V __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned x, unsigned c, V *p)
+{
+  V v = *p;
+  if (c < 360)
+    v = (V) { 0 };
+  v *= (V) { x };
+  return v[1];
+}
index a265623bc78346e50ac2b05c097ab6831fab5938..b8333d45d047cc0c37ee5733bd0c75282c21888d 100644 (file)
@@ -1749,7 +1749,7 @@ build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
       else
        vec[pos++] = value;
     }
-  for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
+  while (pos < TYPE_VECTOR_SUBPARTS (type))
     vec[pos++] = build_zero_cst (TREE_TYPE (type));
 
   return build_vector (type, vec);