]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/67619 (ICE at -O1 and above on x86_64-linux-gnu in int_mode_for_mode...
authorUros Bizjak <ubizjak@gmail.com>
Mon, 21 Sep 2015 19:08:38 +0000 (21:08 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 21 Sep 2015 19:08:38 +0000 (21:08 +0200)
PR middle-end/67619
* except.c (expand_builtin_eh_return): Use copy_addr_to_reg to copy
the address to a register.

testsuite/ChangeLog:

PR middle-end/67619
* gcc.dg/torture/pr67619.c: New test.
* lib/target-supports.exp (check_effective_target_builtin_eh_return):
New procedure.

From-SVN: r227984

gcc/ChangeLog
gcc/except.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr67619.c [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp

index c9caa9f94c07c910b8817e611b05ee8d7744e71c..69c3bce6394c45371ca6f7516c3c7ed93e449ca2 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/67619
+       * except.c (expand_builtin_eh_return): Use copy_addr_to_reg to copy
+       the address to a register.
+
 2015-09-19  John David Anglin  <danglin@gcc.gnu.org>
 
        * config/pa/pa.c (pa_function_ok_for_sibcall): Remove special treatment
index 908954cbbbf0cffc5f00db1eddd2ddf404c1b45c..010e7dfb339f4b2619a2416df2b08ab7e9ba7a9b 100644 (file)
@@ -2223,7 +2223,7 @@ expand_builtin_eh_return (tree stackadj_tree ATTRIBUTE_UNUSED,
                     VOIDmode, EXPAND_NORMAL);
   tmp = convert_memory_address (Pmode, tmp);
   if (!crtl->eh.ehr_stackadj)
-    crtl->eh.ehr_stackadj = copy_to_reg (tmp);
+    crtl->eh.ehr_stackadj = copy_addr_to_reg (tmp);
   else if (tmp != crtl->eh.ehr_stackadj)
     emit_move_insn (crtl->eh.ehr_stackadj, tmp);
 #endif
@@ -2232,7 +2232,7 @@ expand_builtin_eh_return (tree stackadj_tree ATTRIBUTE_UNUSED,
                     VOIDmode, EXPAND_NORMAL);
   tmp = convert_memory_address (Pmode, tmp);
   if (!crtl->eh.ehr_handler)
-    crtl->eh.ehr_handler = copy_to_reg (tmp);
+    crtl->eh.ehr_handler = copy_addr_to_reg (tmp);
   else if (tmp != crtl->eh.ehr_handler)
     emit_move_insn (crtl->eh.ehr_handler, tmp);
 
index b5a53a305b94885f96df316769c68f6688a16733..25175e4c6c070b3ca96219e0df6dcf9bfd48d4a7 100644 (file)
@@ -1,3 +1,10 @@
+2015-09-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/67619
+       * gcc.dg/torture/pr67619.c: New test.
+       * lib/target-supports.exp (check_effective_target_builtin_eh_return):
+       New procedure.
+
 2015-08-27  Pat Haugen  <pthaugen@us.ibm.com>
 
        Backport from mainline:
diff --git a/gcc/testsuite/gcc.dg/torture/pr67619.c b/gcc/testsuite/gcc.dg/torture/pr67619.c
new file mode 100644 (file)
index 0000000..9c6bb6e
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target builtin_eh_return } */
+
+void
+foo ()
+{
+  unsigned long l;
+  void *p = 0; 
+
+  __builtin_unwind_init ();
+  l = 0; 
+  __builtin_eh_return (l, p);
+}
index 1bb6a4784b5a5d46f7a8b6d2420b42588466375a..47de9943f0d168e077e2603b59c4e1e0431faddb 100644 (file)
@@ -5852,3 +5852,12 @@ proc force_conventional_output_for { test } {
     }
 }
 
+# Return 1 if target supports __builtin_eh_return
+proc check_effective_target_builtin_eh_return { } {
+    return [check_no_compiler_messages builtin_eh_return object {
+       void test (long l, void *p)
+       {
+           __builtin_eh_return (l, p);
+       }
+    } "" ]
+}