This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][Middle-end]Fix PR80295 [7/8 Regression] ICE in __builtin_update_setjmp_buf expander
- From: Qing Zhao <qing dot zhao at oracle dot com>
- To: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Cc: rguenther at suse dot de, law at redhat dot com, wilco Dijkstra <wilco dot dijkstra at arm dot com>
- Date: Mon, 16 Oct 2017 14:47:26 -0500
- Subject: [PATCH][Middle-end]Fix PR80295 [7/8 Regression] ICE in __builtin_update_setjmp_buf expander
- Authentication-results: sourceware.org; auth=none
resend this patch for middle-end to review.
this patch was originally sent to aarch64 for review in the beginning:
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00404.html <https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00404.html>
The implementation of __builtin_update_setjmp_buf is not correct. It takes a pointer
as an operand and treats the Mode of the pointer as Pmode, which is not correct.
a conversion from ptr_mode to Pmode is needed for this pointer.
bootstrapped and tested on both aarch64-unknown-linux-gnu and x86_64-pc-linux-gnu,
no regressions.
Wilco helped me a lot during fixing this bug.
Okay for trunk?
the patch is:
gcc/ChangeLog
2017-10-16 Qing Zhao <qing.zhao@oracle.com>
Wilco Dijkstra <wilco.dijkstra@arm.com>
* builtins.c (expand_builtin_update_setjmp_buf): Add a
converstion to Pmode from the buf_addr.
gcc/testsuite/ChangeLog
2017-10-16 Qing Zhao <qing.zhao@oracle.com>
Wilco Dijkstra <wilco.dijkstra@arm.com>
PR middle-end/80295
* gcc.target/aarch64/pr80295.c: New test.
---
gcc/builtins.c | 1 +
gcc/testsuite/gcc.target/aarch64/pr80295.c | 8 ++++++++
2 files changed, 9 insertions(+)
create mode 100644 gcc/testsuite/gcc.target/aarch64/pr80295.c
diff --git a/gcc/builtins.c b/gcc/builtins.c
index c8a5ea6..01fb08b 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -1199,6 +1199,7 @@ void
expand_builtin_update_setjmp_buf (rtx buf_addr)
{
machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+ buf_addr = convert_memory_address (Pmode, buf_addr);
rtx stack_save
= gen_rtx_MEM (sa_mode,
memory_address
diff --git a/gcc/testsuite/gcc.target/aarch64/pr80295.c b/gcc/testsuite/gcc.target/aarch64/pr80295.c
new file mode 100644
index 0000000..b3866d8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr80295.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-mabi=ilp32" } */
+
+void f (void *b)
+{
+ __builtin_update_setjmp_buf (b);
+}
+
--
1.9.1