+2019-03-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/87485
+ * function.c (expand_function_end): Move stack_protect_epilogue
+ before loading of return value into hard register(s).
+
2019-03-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/89621
communicate between __builtin_eh_return and the epilogue. */
expand_eh_return ();
+ /* If stack protection is enabled for this function, check the guard. */
+ if (crtl->stack_protect_guard
+ && targetm.stack_protect_runtime_enabled_p ()
+ && naked_return_label == NULL_RTX)
+ stack_protect_epilogue ();
+
/* If scalar return value was computed in a pseudo-reg, or was a named
return value that got dumped to the stack, copy that to the hard
return register. */
emit_insn (gen_blockage ());
/* If stack protection is enabled for this function, check the guard. */
- if (crtl->stack_protect_guard && targetm.stack_protect_runtime_enabled_p ())
+ if (crtl->stack_protect_guard
+ && targetm.stack_protect_runtime_enabled_p ()
+ && naked_return_label)
stack_protect_epilogue ();
/* If we had calls to alloca, and this machine needs
+2019-03-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/87485
+ * gcc.dg/pr87485.c: New test.
+
2019-03-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/89621
--- /dev/null
+/* PR rtl-optimization/87485 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -fschedule-insns -fno-guess-branch-probability -fno-isolate-erroneous-paths-dereference -fno-omit-frame-pointer -fno-split-wide-types -fno-tree-ccp -fno-tree-sra" } */
+/* { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } */
+
+int *a;
+
+int
+foo (__int128 x, int y, int z)
+{
+ __int128 b;
+ *a = ((!!y ? y : x) * y | x) * 2;
+ if (z == 0)
+ {
+ unsigned int c = 1;
+ __int128 *d = &b;
+ for (*a = 0; *a < 1; *a += y)
+ ;
+ *a += b < (c / 0); /* { dg-warning "division by zero" } */
+ goto l;
+ m:
+ while (b < 1)
+ ;
+ ++*a;
+ }
+ goto m;
+ l:
+ return 0;
+}