From: zack Date: Sat, 18 Sep 2004 00:53:50 +0000 (+0000) Subject: * directives.c (do_pragma): Save current buffer position X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=e9cc3617d6f7247ec3c804e3681d166a57529bb0 * directives.c (do_pragma): Save current buffer position before lexing the pragma keywords; don't call _cpp_backup_tokens in the defer_pragmas case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87687 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index b9aac7bad09..5727f1ba165 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2004-09-17 Zack Weinberg + + * directives.c (do_pragma): Save current buffer position + before lexing the pragma keywords; don't call + _cpp_backup_tokens in the defer_pragmas case. + 2004-09-15 Per Bothner * include/line-map.h (line_map_start): Add parameter names so diff --git a/libcpp/directives.c b/libcpp/directives.c index b2b6b32e6c1..49f95ca3389 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1145,6 +1145,11 @@ do_pragma (cpp_reader *pfile) const cpp_token *token, *pragma_token = pfile->cur_token; unsigned int count = 1; + /* Save the current position so that defer_pragmas mode can + copy the entire current line to a string. It will not work + to use _cpp_backup_tokens as that does not reverse buffer->cur. */ + const uchar *line_start = CPP_BUFFER (pfile)->cur; + pfile->state.prevent_expansion++; token = cpp_get_token (pfile); @@ -1174,13 +1179,11 @@ do_pragma (cpp_reader *pfile) else if (CPP_OPTION (pfile, defer_pragmas)) { /* Squirrel away the pragma text. Pragmas are newline-terminated. */ - const uchar *line_start, *line_end; + const uchar *line_end; uchar *s; cpp_string body; cpp_token *ptok; - _cpp_backup_tokens (pfile, count); - line_start = CPP_BUFFER (pfile)->cur; line_end = ustrchr (line_start, '\n'); body.len = (line_end - line_start) + 1;