diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index eaa96a5a7722c6e764101a6dfb4a473f3df0b253..0d91aed04b0a96613e2dfbf62e878f9dd423acac 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 98d4c5eedb9fe7b98bed85a691cb0e870262df10..0628b22d80cd11367e3b6323b0082de8d84120c5 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