OSDN Git Service

PR libcpp/34866:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Apr 2008 00:58:58 +0000 (00:58 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Apr 2008 00:58:58 +0000 (00:58 +0000)
* errors.c (cpp_error): Don't reference a token before the start
of the current run.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134421 138bc75d-0d04-0410-961f-82ee72b054a4

libcpp/ChangeLog
libcpp/errors.c

index 0eb632f..0826b62 100644 (file)
@@ -1,3 +1,9 @@
+2008-04-17  Tom Tromey  <tromey@redhat.com>
+
+       PR libcpp/34866:
+       * errors.c (cpp_error): Don't reference a token before the start
+       of the current run.
+
 2008-04-16  Tom Tromey  <tromey@redhat.com>
 
        * Makefile.in (TAGS_SOURCES): New variable.
index 97de490..0b7c1e0 100644 (file)
@@ -1,6 +1,6 @@
 /* Default error handlers for CPP Library.
    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000,
-   2001, 2002, 2004 Free Software Foundation, Inc.
+   2001, 2002, 2004, 2008 Free Software Foundation, Inc.
    Written by Per Bothner, 1994.
    Based on CCCP program by Paul Rubin, June 1986
    Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -151,6 +151,15 @@ cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
          else
            src_loc = pfile->line_table->highest_line;
        }
+      /* We don't want to refer to a token before the beginning of the
+        current run -- that is invalid.  */
+      else if (pfile->cur_token == pfile->cur_run->base)
+       {
+         if (pfile->cur_run->prev != NULL)
+           src_loc = pfile->cur_run->prev->limit->src_loc;
+         else
+           src_loc = 0;
+       }
       else
        {
          src_loc = pfile->cur_token[-1].src_loc;