diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 82376462282..dc283915c36 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2001-11-12  Jim Blandy  <jimb@redhat.com>
+
+	Patch from Andreas Schwab <schwab@suse.de>:
+	* eval.c (evaluate_subexp_standard): Fix memory leak: use alloca
+	instead of xmalloc.
+
 2001-11-12  Jim Blandy  <jimb@redhat.com>
 
 	* corefile.c (write_memory_unsigned_integer,
diff --git a/gdb/eval.c b/gdb/eval.c
index 3b1a06c94cb..c15b236568c 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -839,7 +839,7 @@ evaluate_subexp_standard (struct type *expect_type,
 	      struct value *valp = NULL;
 
 	      /* Prepare list of argument types for overload resolution */
-	      arg_types = (struct type **) xmalloc (nargs * (sizeof (struct type *)));
+	      arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
 	      for (ix = 1; ix <= nargs; ix++)
 		arg_types[ix - 1] = VALUE_TYPE (argvec[ix]);
 
@@ -888,7 +888,7 @@ evaluate_subexp_standard (struct type *expect_type,
 	      struct symbol *symp;
 
 	      /* Prepare list of argument types for overload resolution */
-	      arg_types = (struct type **) xmalloc (nargs * (sizeof (struct type *)));
+	      arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
 	      for (ix = 1; ix <= nargs; ix++)
 		arg_types[ix - 1] = VALUE_TYPE (argvec[ix]);