directives.c (do_pragma): Save current buffer position before lexing the pragma keywo...
authorZack Weinberg <zack@codesourcery.com>
Sat, 18 Sep 2004 00:53:50 +0000 (00:53 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Sat, 18 Sep 2004 00:53:50 +0000 (00:53 +0000)
* directives.c (do_pragma): Save current buffer position
before lexing the pragma keywords; don't call
_cpp_backup_tokens in the defer_pragmas case.

From-SVN: r87687

libcpp/ChangeLog
libcpp/directives.c

index b9aac7bad096950cf58f90ebb23fc41223386e72..5727f1ba165a396ae538fd6f2890ffee2cfcfe8a 100644 (file)
@@ -1,3 +1,9 @@
+2004-09-17  Zack Weinberg  <zack@codesourcery.com>
+
+       * 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  <per@bothner.com>
 
        * include/line-map.h (line_map_start):  Add parameter names so
index b2b6b32e6c1599549dbed13654ef3c72e188572a..49f95ca338953fce6f5627a9cd6e44bda8847bc6 100644 (file)
@@ -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;