aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-02-24 14:54:39 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-02-24 14:54:39 +0100
commit89c0c1fd5c76569f66dc06fd2ecfa37704620151 (patch)
tree8c25e74e820762879c64b1e1c2217a6378901f04 /gcc
parent0683fd27deb878be38f120cce3acbe4d32132b20 (diff)
downloadgcc-89c0c1fd5c76569f66dc06fd2ecfa37704620151.zip
gcc-89c0c1fd5c76569f66dc06fd2ecfa37704620151.tar.gz
gcc-89c0c1fd5c76569f66dc06fd2ecfa37704620151.tar.bz2
re PR middle-end/69915 (ICE: SIGSEGV with -O -ftracer with broken backtrace)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr69915.c15
-rw-r--r--gcc/tree.c2
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f6ae5e..53376ae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 710dd11..5b758dc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..4c60c59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69915.c
@@ -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];
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index a265623..b8333d4 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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);