From c838d82f7be4c89e64f33772bcadb05061e2730a Mon Sep 17 00:00:00 2001
From: Mark Mitchell <mark@codesourcery.com>
Date: Mon, 30 Dec 2002 20:18:38 +0000
Subject: [PATCH] * parser.c (cp_parser_declaration_seq_opt): Handle
 pending_lang_change.

From-SVN: r60644
---
 gcc/cp/ChangeLog |  4 ++++
 gcc/cp/parser.c  | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 050ba952a514..db212ba8f5c5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-30  Mark Mitchell  <mark@codesourcery.com>
+
+	* parser.c (cp_parser_declaration_seq_opt): Handle pending_lang_change.
+
 2002-12-30  David Edelsohn  <edelsohn@gnu.org>
 
 	* parser.c (cp_parser_parameter_declaration_clause): Treat system
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 94742504145d..cb8dbe97b160 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -6456,6 +6456,20 @@ cp_parser_declaration_seq_opt (parser)
 	  continue;
 	}
 
+      /* The C lexer modifies PENDING_LANG_CHANGE when it wants the
+	 parser to enter or exit implict `extern "C"' blocks.  */
+      while (pending_lang_change > 0)
+	{
+	  push_lang_context (lang_name_c);
+	  --pending_lang_change;
+	}
+      while (pending_lang_change < 0)
+	{
+	  pop_lang_context ();
+	  ++pending_lang_change;
+	}
+
+      /* Parse the declaration itself.  */
       cp_parser_declaration (parser);
     }
 }
-- 
GitLab