diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 28cbfda34ba296be5cc1577d7629fbb51e706c97..c5cbb7485e72ab556d59f01a8b8f28283aae9ec0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-22  Olivier Hainque  <hainque@act-europe.fr>
+
+	* config/alpha/alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't
+	set FRP on stack adjustment for outgoing args if frame_pointer_needed.
+
 2003-04-22  Vincent Celier <celier@gnat.com>
 
         * gthr-gnat.h, gthr-gnat.c: new sources for implementation of
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 2bcf9128f338e8af2f039d1a1ba10fc1852047d2..81d8c206a8ba1fff4f00d7beecfbb7fd1a2cfdb4 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -7503,11 +7503,31 @@ alpha_expand_prologue ()
 
       /* If we have to allocate space for outgoing args, do it now.  */
       if (current_function_outgoing_args_size != 0)
-	FRP (emit_move_insn
-	     (stack_pointer_rtx, 
-	      plus_constant (hard_frame_pointer_rtx,
-			     - (ALPHA_ROUND
-				(current_function_outgoing_args_size)))));
+	{
+	  rtx seq
+	    = emit_move_insn (stack_pointer_rtx, 
+			      plus_constant
+			      (hard_frame_pointer_rtx,
+			       - (ALPHA_ROUND
+				  (current_function_outgoing_args_size))));
+	  
+	  /* Only set FRAME_RELATED_P on the stack adjustment we just emitted
+	     if ! frame_pointer_needed. Setting the bit will change the CFA
+	     computation rule to use sp again, which would be wrong if we had
+	     frame_pointer_needed, as this means sp might move unpredictably
+	     later on.
+
+	     Also, note that
+	       frame_pointer_needed
+	       => vms_unwind_regno == HARD_FRAME_POINTER_REGNUM
+	     and
+	       current_function_outgoing_args_size != 0
+	       => alpha_procedure_type != PT_NULL,
+
+	     so when we are not setting the bit here, we are guaranteed to
+	     have emited an FRP frame pointer update just before.  */
+	  RTX_FRAME_RELATED_P (seq) = ! frame_pointer_needed;
+	}
     }
   else if (!TARGET_ABI_UNICOSMK)
     {