Add the same memory clobbers to `builtin_longjmp' for Alpha as with 
commit 41439bf6a647 ("builtins.c (expand_builtin_longjmp): Added two 
memory clobbers."), to prevent instructions that access memory via the 
frame or stack pointer from being moved across the write to the frame 
pointer.

        gcc/
        * config/alpha/alpha.md (builtin_longjmp): Add memory clobbers.
---
 gcc/config/alpha/alpha.md |    2 ++
 1 file changed, 2 insertions(+)

gcc-alpha-builtin-longjmp-clobbers.diff
Index: gcc/gcc/config/alpha/alpha.md
===================================================================
--- gcc.orig/gcc/config/alpha/alpha.md
+++ gcc/gcc/config/alpha/alpha.md
@@ -5156,6 +5156,8 @@
   rtx pv = gen_rtx_REG (Pmode, 27);
 
   /* This bit is the same as expand_builtin_longjmp.  */
+  emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+  emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
   emit_move_insn (hard_frame_pointer_rtx, fp);
   emit_move_insn (pv, lab);
   emit_stack_restore (SAVE_NONLOCAL, stack);

Reply via email to