diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0ec03d0327be38ac50094b52d402b39772f7087d..add9b416b6adb1e7dbfc3ec08941217a0894fa3e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-06-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+	* gengtype.c (oprintf): Move VA_CLOSE after all fixedarg uses.
+
 2002-06-30  Alan Modra  <amodra@bigpond.net.au>
 
 	* unroll.c (loop_iterations): Handle EQ loops.
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index e58fc35dd8608d6bf7163b80be661c1a4eebea02..f96fc53c463649c35da84d3a1d924bc10817ea37 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -586,7 +586,6 @@ oprintf VPARAMS ((outf_p o, const char *format, ...))
   VA_FIXEDARG (ap, outf_p, o);
   VA_FIXEDARG (ap, const char *, format);
   slength = xvasprintf (&s, format, ap);
-  VA_CLOSE (ap);
 
   if (o->bufused + slength > o->buflength)
     {
@@ -602,6 +601,7 @@ oprintf VPARAMS ((outf_p o, const char *format, ...))
   memcpy (o->buf + o->bufused, s, slength);
   o->bufused += slength;
   free (s);
+  VA_CLOSE (ap);
 }
 
 /* Open the global header file and the language-specific header files.  */