diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f0198fd523064dbc7c706e6451db93dc81c970ad..e3e61f7e925d76c69f3752f228b084c970140059 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
 Sun Feb  8 00:09:59 1998  Jeffrey A Law  (law@cygnus.com)
 
+	* expr.c (clear_pending_stack_adjust): Handle case where a function
+	calls alloca, but the user has specified -fomit-fframe-pointer.
+
 	* function.c (assign_parms): Fix typo in last change.
 
 Sat Feb  7 23:54:29 1998   Robert Lipe  <robertl@dgii.com>
diff --git a/gcc/expr.c b/gcc/expr.c
index 4d927d73052a1072234b1935079ea1de7a5e4196..74c6be56b24f4b962d2db71cbf81e41cd3443fca 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -9576,14 +9576,18 @@ init_pending_stack_adjust ()
 }
 
 /* When exiting from function, if safe, clear out any pending stack adjust
-   so the adjustment won't get done.  */
+   so the adjustment won't get done.
+
+   Note, if the current function calls alloca, then it must have a
+   frame pointer regardless of the value of flag_omit_frame_pointer.  */
 
 void
 clear_pending_stack_adjust ()
 {
 #ifdef EXIT_IGNORE_STACK
   if (optimize > 0
-      && ! flag_omit_frame_pointer && EXIT_IGNORE_STACK
+      && (! flag_omit_frame_pointer || current_function_calls_alloca)
+      && EXIT_IGNORE_STACK
       && ! (DECL_INLINE (current_function_decl) && ! flag_no_inline)
       && ! flag_inline_functions)
     pending_stack_adjust = 0;