From f3d5aeebf434fd8b5f500e138c12ba55aefde27b Mon Sep 17 00:00:00 2001
From: Alexandre Oliva <aoliva@redhat.com>
Date: Thu, 1 Jun 2006 04:55:32 +0000
Subject: [PATCH] re PR c++/26660 (PCH vs -save-temps, ICE while GCing)

PR c++/26660
* parser.c (cp_parser_initial_pragma): Read one more token for
caller after reading PCH file in.

From-SVN: r114298
---
 gcc/cp/ChangeLog | 6 ++++++
 gcc/cp/parser.c  | 8 +++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index eaa96a5a7722..0d91aed04b0a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-06-01  Alexandre Oliva  <aoliva@redhat.com>
+
+	PR c++/26660
+	* parser.c (cp_parser_initial_pragma): Read one more token for
+	caller after reading PCH file in.
+
 2006-05-31  Mark Mitchell  <mark@codesourcery.com>
 
 	PR c++/27801
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 98d4c5eedb9f..0628b22d80cd 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -19006,12 +19006,14 @@ cp_parser_initial_pragma (cp_token *first_token)
   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
     cp_lexer_get_preprocessor_token (NULL, first_token);
 
-  /* Read one more token to return to our caller.  */
-  cp_lexer_get_preprocessor_token (NULL, first_token);
-
   /* Now actually load the PCH file.  */
   if (name)
     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
+
+  /* Read one more token to return to our caller.  We have to do this
+     after reading the PCH file in, since its pointers have to be
+     live.  */
+  cp_lexer_get_preprocessor_token (NULL, first_token);
 }
 
 /* Normal parsing of a pragma token.  Here we can (and must) use the
-- 
GitLab