aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2016-03-07 03:48:57 -0800
committerRichard Henderson <rth@gcc.gnu.org>2016-03-07 03:48:57 -0800
commit5edb985350a075f467323e37cdb41c84b6127fcf (patch)
tree9cdf333a2423bf80e844905edf079aa43f0ac82d /gcc
parent2067a8f3c21aea9c049fcddb673aeee71911428d (diff)
downloadgcc-5edb985350a075f467323e37cdb41c84b6127fcf.zip
gcc-5edb985350a075f467323e37cdb41c84b6127fcf.tar.gz
gcc-5edb985350a075f467323e37cdb41c84b6127fcf.tar.bz2
re PR rtl-optimization/70061 (ICE: SIGSEGV in delete_insn_chain() with unused label)
PR rtl-opt/70061 * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust. (insert_value_copy_on_edge): Likewise. * gcc.c-torture/compile/pr70061.c: New test. From-SVN: r234025
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70061.c10
-rw-r--r--gcc/tree-outof-ssa.c4
4 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dac4a19..0fe90a6a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-03-07 Richard Henderson <rth@redhat.com>
+
+ PR rtl-opt/70061
+ * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust.
+ (insert_value_copy_on_edge): Likewise.
+
2016-03-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm_neon.h: Show error if using with soft-float ABI.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e3ed862..952bfeb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-07 Richard Henderson <rth@redhat.com>
+
+ * gcc.c-torture/compile/pr70061.c: New test.
+
2016-03-07 Richard Biener <rguenther@suse.de>
PR testsuite/70109
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70061.c b/gcc/testsuite/gcc.c-torture/compile/pr70061.c
new file mode 100644
index 0000000..a7ebcfc
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70061.c
@@ -0,0 +1,10 @@
+typedef int v8si __attribute__ ((vector_size (32)));
+
+int
+foo(v8si c, v8si d)
+{
+l0:
+ if (c[2])
+ d ^= c;
+ return d[3];
+}
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index 25286a2..4125529 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-ter.h"
#include "tree-ssa-coalesce.h"
#include "tree-outof-ssa.h"
+#include "dojump.h"
/* FIXME: A lot of code here deals with expanding to RTL. All that code
should be in cfgexpand.c. */
@@ -220,6 +221,7 @@ emit_partition_copy (rtx dest, rtx src, int unsignedsrcp, tree sizeexp)
}
else
emit_move_insn (dest, src);
+ do_pending_stack_adjust ();
rtx_insn *seq = get_insns ();
end_sequence ();
@@ -312,6 +314,8 @@ insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus)
if (x != dest_rtx)
emit_move_insn (dest_rtx, x);
+ do_pending_stack_adjust ();
+
seq = get_insns ();
end_sequence ();