diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 54db0bdd9e3956c1358bfddf60500df092811923..f4d2d20e9d078fda93d9fdbae64ef70ec413ede3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2001-10-02  Jason Merrill  <jason_merrill@redhat.com>
+
+	* spew.c (end_input): No longer static.
+	* cp-tree.h: Declare it.
+	* parse.y (datadef): Add "error END_OF_SAVED_INPUT" expansion.
+
 2001-10-02  Joseph S. Myers  <jsm28@cam.ac.uk>
 
 	* call.c (build_over_call), typeck.c (build_function_call_real):
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index de58ee4b890f81711e5fdf89bebae8022ae75c6c..b4fc016f46cf8aa1822cf4df5dad4d7265c6ec04 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -4142,6 +4142,7 @@ extern void do_pending_defargs			PARAMS ((void));
 extern void done_pending_defargs		PARAMS ((void));
 extern void unprocessed_defarg_fn               PARAMS ((tree));
 extern void replace_defarg			PARAMS ((tree, tree));
+extern void end_input				PARAMS ((void));
 
 /* in tree.c */
 extern void init_tree			        PARAMS ((void));
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 9801c3817fa7963a2972df961ae6ad482412deae..a7651b57468b23e594e70c50986698abed7128a0 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -736,6 +736,8 @@ datadef:
 		}
 	| error ';'
 	| error '}'
+	| error END_OF_SAVED_INPUT
+		{ end_input (); }
 	| ';'
 	| bad_decl
 	;
diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c
index 64cf48dd1607e4937ac30520d7e539d30af08b63..14569718a997e2fcfa9ba69a918e02135eb894f1 100644
--- a/gcc/cp/spew.c
+++ b/gcc/cp/spew.c
@@ -113,7 +113,6 @@ static SPEW_INLINE void consume_token PARAMS ((void));
 static SPEW_INLINE int read_process_identifier PARAMS ((YYSTYPE *));
 
 static SPEW_INLINE void feed_input PARAMS ((struct unparsed_text *));
-static SPEW_INLINE void end_input PARAMS ((void));
 static SPEW_INLINE void snarf_block PARAMS ((const char *, int));
 static tree snarf_defarg PARAMS ((void));
 static int frob_id PARAMS ((int, int, tree *));
@@ -358,7 +357,7 @@ read_token (t)
   return t->yychar;
 }
 
-static SPEW_INLINE void
+static void
 feed_input (input)
      struct unparsed_text *input;
 {
@@ -397,7 +396,7 @@ feed_input (input)
   feed = f;
 }
 
-static SPEW_INLINE void
+void
 end_input ()
 {
   struct feed *f = feed;