aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2006-06-01 04:55:32 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2006-06-01 04:55:32 +0000
commitf3d5aeebf434fd8b5f500e138c12ba55aefde27b (patch)
tree4365b2760e10f767d99a2ec155b57e49ba8c4f83
parent699fa7aa1a796f815f01518b0ab622e8f478c7dc (diff)
downloadgcc-f3d5aeebf434fd8b5f500e138c12ba55aefde27b.zip
gcc-f3d5aeebf434fd8b5f500e138c12ba55aefde27b.tar.gz
gcc-f3d5aeebf434fd8b5f500e138c12ba55aefde27b.tar.bz2
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
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index eaa96a5..0d91aed 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 98d4c5e..0628b22 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