re PR target/79494 (ICE in maybe_record_trace_start, at dwarf2cfi.c:2330)
authorJakub Jelinek <jakub@redhat.com>
Tue, 21 Feb 2017 14:39:21 +0000 (15:39 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 21 Feb 2017 14:39:21 +0000 (15:39 +0100)
PR target/79494
* config/i386/i386.c (ix86_expand_split_stack_prologue): Call
make_reg_eh_region_note_nothrow_nononlocal on call_insn.
* config/rs6000/rs6000.c: Include except.h.
(rs6000_expand_split_stack_prologue): Call
make_reg_eh_region_note_nothrow_nononlocal on the call insn.

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

From-SVN: r245629

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr79494.c [new file with mode: 0644]

index 1286f16d5462e971ce09d66e620944fb8cbbae0c..0d39438c673e4077cd8ad94e167c8441cc23a516 100644 (file)
@@ -1,3 +1,12 @@
+2017-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/79494
+       * config/i386/i386.c (ix86_expand_split_stack_prologue): Call
+       make_reg_eh_region_note_nothrow_nononlocal on call_insn.
+       * config/rs6000/rs6000.c: Include except.h.
+       (rs6000_expand_split_stack_prologue): Call
+       make_reg_eh_region_note_nothrow_nononlocal on the call insn.
+
 2017-02-21  Martin Jambor  <mjambor@suse.cz>
 
        PR lto/79579
index fe2dd6a0ce753383c21ab2a48ef978859ba338b9..14ac189fc42bda5c7a8d1ec562bb3d13ca0ad1aa 100644 (file)
@@ -15057,6 +15057,8 @@ ix86_expand_split_stack_prologue (void)
   add_function_usage_to (call_insn, call_fusage);
   if (!TARGET_64BIT)
     add_reg_note (call_insn, REG_ARGS_SIZE, GEN_INT (0));
+  /* Indicate that this function can't jump to non-local gotos.  */
+  make_reg_eh_region_note_nothrow_nononlocal (as_a <rtx_insn *> (call_insn));
 
   /* In order to make call/return prediction work right, we now need
      to execute a return instruction.  See
index 41ad008e2a22a88dc2e3f4adba23a25bb375a37e..25b10f12742d66c28f9a8f6e3123826ed06d01ad 100644 (file)
@@ -66,6 +66,7 @@
 #include "builtins.h"
 #include "context.h"
 #include "tree-pass.h"
+#include "except.h"
 #if TARGET_XCOFF
 #include "xcoffout.h"  /* get declarations of xcoff_*_section_name */
 #endif
@@ -31680,6 +31681,8 @@ rs6000_expand_split_stack_prologue (void)
      split_stack_return use r0.  */
   use_reg (&call_fusage, r0);
   add_function_usage_to (insn, call_fusage);
+  /* Indicate that this function can't jump to non-local gotos.  */
+  make_reg_eh_region_note_nothrow_nononlocal (insn);
   emit_insn (gen_frame_load (r0, r1, info->lr_save_offset));
   insn = emit_move_insn (lr, r0);
   add_reg_note (insn, REG_CFA_RESTORE, lr);
index 7161eb0cfda9c80b0228c9288a06c88105dd9cd5..b9c70a7b77b09b2ea537233398a1fd580415d294 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/79494
+       * gcc.dg/pr79494.c: New test.
+
 2017-02-21  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * gcc.dg/plugin/diagnostic-test-expressions-1.c: Add -Wno-psabi
diff --git a/gcc/testsuite/gcc.dg/pr79494.c b/gcc/testsuite/gcc.dg/pr79494.c
new file mode 100644 (file)
index 0000000..e8543f8
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/79494 */
+/* { dg-do compile } */
+/* { dg-require-effective-target split_stack } */
+/* { dg-options "-O2 -fsplit-stack -g" } */
+
+void
+foo (int a)
+{
+  __label__ lab;
+  __attribute__((noinline, noclone)) void bar (int b)
+  {
+    switch (b)
+      {
+      case 1:
+       goto lab;
+      case 2:
+       goto lab;
+      }
+  }
+  bar (a);
+lab:;
+}