This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH to speed up cpplib


This patch replaces the 'line' field of the cpp_reader struct
by a new 'highest_line' field in struct line_maps.  This plus
some other optimizations removes a number of function calls.

I measured a speed up over over 20% running cc1 on expr.c and
stmt.c (with -O2 and identical source and options).  However,
I'm not quite sure I believe it.  The resulting .s files aren't
identical, though most of the changes are in label numbers, but
some are instruction differences.  I'd like to understand these
differences.

Bootstrapped and ran make check on Fedora1, but with
--enable-languages=c so far.  I'm hoping others will do some
more testing and measurements.

This change applies to mainline and the tree-ssa branch, but not
the 3.4 branch, since it improves on the column-number support
I implemented in the line_table structure in mainline, but not
in 3.4.  It is plausible that some or all of the improvement is
fixing slow-down due the column-number support, but I don't
have the numbers to say for sure.

Please try it out and let me know how it works for you.  And if
someone can track down the output differences, that would be
much appreciated.
--
	--Per Bothner
per@bothner.com   http://per.bothner.com/

2004-03-14  Per Bothner  <per@bothner.com>

	* line-map.h (struct line_maps):  New field highest_line.
	(linemap_position_for_column):  Make non-inline function.
	(LINEMAP_POSITION_FOR_COLUMN):  New macro.
	* line-map.c (linemap_init):  Clear highest_line field.
	(linemap_add):  Set highest_line field.
	(linemap_line_start):  Minor optimization - use highest_line field.
	Reduce maximum column hint to 10000.  Update highest_line field.
	(linemap_position_for_column):  Moved from line-map.h.  Optimize a bit.
	* cpphash.h (struct cpp_reader):  Remove line field - instead use
	line_table->highest_line.
	(saved_line):  Remove unused field.
	(CPP_INCREMENT_FILE):  Don't do linemap_lookup - just use newest map.
	Use  line_table's highest_line field instead of cpp_reader's line.
	* cpplib.c (start_directive):  Likewise use highest_line field.
	(do_line, do_linemarker):  Likewise just use newest map.
	(_cpp_do_file_change):  Don't need to set cpp_reader's line field.
	* cpperror.c (cpp_error):  Likewise use highest_line field.
	* cppfiles.c (open_file_failed:  Likewise.
	(cpp_make_system_header):  Likewise use newest map and highest_line.
	* cppinit.c (cpp_create_reader):  Don't initialize removed field.
	* cpplex.c (_cpp_process_line_notes, _cpp_skip_block_comment,
	skip_line_comment, skip_whitespace, _cpp_get_fresh_line,
	_cpp_lex_direct):  Likewise use highest_line.
	(_cpp_lex_direct):  Use new LINEMAP_POSITION_FOR_COLUMN macro.
	* cppmacro.c (_cpp_builtin_macro_text):  Likewise use highest_line,
	and use newest map.
	* cpppch.c (cpp_read_state):  Don't save+restore cpp_reader's line.
	* cpptrad.c (_cpp_overlay_buffer):  Don't save cpp_reader's line.
	(copy_comment, _cpp_scan_out_logical_line):  Likewise use highest_line.

Index: cpplib.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpplib.c,v
retrieving revision 1.361
diff -u -p -r1.361 cpplib.c
--- cpplib.c	12 Feb 2004 02:25:02 -0000	1.361
+++ cpplib.c	15 Mar 2004 06:10:10 -0000
@@ -228,7 +228,7 @@ start_directive (cpp_reader *pfile)
   pfile->state.save_comments = 0;
 
   /* Some handlers need the position of the # for diagnostics.  */
-  pfile->directive_line = pfile->line;
+  pfile->directive_line = pfile->line_table->highest_line;
 }
 
 /* Called when leaving a directive, _Pragma or command-line directive.  */
@@ -777,7 +777,8 @@ strtoul_for_line (const uchar *str, unsi
 static void
 do_line (cpp_reader *pfile)
 {
-  const struct line_map *map = linemap_lookup (pfile->line_table, pfile->line);
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used - 1];
   const cpp_token *token;
   const char *new_file = map->to_file;
   unsigned long new_lineno;
@@ -827,7 +828,8 @@ do_line (cpp_reader *pfile)
 static void
 do_linemarker (cpp_reader *pfile)
 {
-  const struct line_map *map = linemap_lookup (pfile->line_table, pfile->line);
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used - 1];
   const cpp_token *token;
   const char *new_file = map->to_file;
   unsigned long new_lineno;
@@ -907,10 +909,8 @@ _cpp_do_file_change (cpp_reader *pfile, 
 {
   const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
 					    to_file, file_line);
-  if (map == NULL)
-    pfile->line = 0;
-  else
-    pfile->line = linemap_line_start (pfile->line_table, map->to_line, 127);
+  if (map != NULL)
+    linemap_line_start (pfile->line_table, map->to_line, 127);
 
   if (pfile->cb.file_change)
     pfile->cb.file_change (pfile, map);
Index: cpperror.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpperror.c,v
retrieving revision 1.73
diff -u -p -r1.73 cpperror.c
--- cpperror.c	11 Feb 2004 15:29:23 -0000	1.73
+++ cpperror.c	15 Mar 2004 06:10:10 -0000
@@ -144,7 +144,7 @@ cpp_error (cpp_reader * pfile, int level
       if (pfile->state.in_directive)
 	src_loc = pfile->directive_line;
       else
-	src_loc = pfile->line;
+	src_loc = pfile->line_table->highest_line;
     }
   else
     {
Index: cppfiles.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppfiles.c,v
retrieving revision 1.205
diff -u -p -r1.205 cppfiles.c
--- cppfiles.c	4 Mar 2004 00:18:45 -0000	1.205
+++ cppfiles.c	15 Mar 2004 06:10:10 -0000
@@ -806,7 +806,7 @@ _cpp_stack_include (cpp_reader *pfile, c
 static void
 open_file_failed (cpp_reader *pfile, _cpp_file *file)
 {
-  int sysp = pfile->line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
+  int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
   bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
 
   errno = file->err_no;
@@ -987,14 +987,15 @@ void
 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
 {
   int flags = 0;
-  const struct line_map *map = linemap_lookup (pfile->line_table, pfile->line);
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used-1];
 
   /* 1 = system header, 2 = system header to be treated as C.  */
   if (syshdr)
     flags = 1 + (externc != 0);
   pfile->buffer->sysp = flags;
   _cpp_do_file_change (pfile, LC_RENAME, map->to_file,
-		       SOURCE_LINE (map, pfile->line), flags);
+		       SOURCE_LINE (map, pfile->line_table->highest_line), flags);
 }
 
 /* Allow the client to change the current file.  Used by the front end
Index: cpphash.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpphash.h,v
retrieving revision 1.212
diff -u -p -r1.212 cpphash.h
--- cpphash.h	18 Feb 2004 22:02:38 -0000	1.212
+++ cpphash.h	15 Mar 2004 06:10:10 -0000
@@ -65,10 +65,10 @@ typedef unsigned char uchar;
 #define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur)
 
 #define CPP_INCREMENT_LINE(PFILE, COLS_HINT) do { \
-    const struct line_map *map \
-      = linemap_lookup (PFILE->line_table, PFILE->line); \
-    unsigned int line = SOURCE_LINE (map, PFILE->line) + 1; \
-    PFILE->line = linemap_line_start (PFILE->line_table, line, COLS_HINT); \
+    const struct line_maps *line_table = PFILE->line_table; \
+    const struct line_map *map = &line_table->maps[line_table->used-1]; \
+    unsigned int line = SOURCE_LINE (map, line_table->highest_line); \
+    linemap_line_start (PFILE->line_table, line + 1, COLS_HINT); \
   } while (0)
 
 /* Maximum nesting of cpp_buffers.  We use a static limit, partly for
@@ -344,7 +344,6 @@ struct cpp_reader
 
   /* Source line tracking.  */
   struct line_maps *line_table;
-  fileline line;
 
   /* The line of the '#' of the current directive.  */
   fileline directive_line;
@@ -465,10 +464,6 @@ struct cpp_reader
 
   /* Used for buffer overlays by cpptrad.c.  */
   const uchar *saved_cur, *saved_rlimit, *saved_line_base;
-
-  /* Used to save the original line number during traditional
-     preprocessing.  */
-  unsigned int saved_line;
 
   /* A saved list of the defined macros, for dependency checking
      of precompiled headers.  */
Index: cppinit.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppinit.c,v
retrieving revision 1.304
diff -u -p -r1.304 cppinit.c
--- cppinit.c	19 Feb 2004 22:18:49 -0000	1.304
+++ cppinit.c	15 Mar 2004 06:10:11 -0000
@@ -175,7 +175,6 @@ cpp_create_reader (enum c_lang lang, has
   /* Initialize the line map.  Start at logical line 1, so we can use
      a line number of zero for special states.  */
   pfile->line_table = line_table;
-  pfile->line = 1;
 
   /* Initialize lexer state.  */
   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Index: cpplex.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpplex.c,v
retrieving revision 1.253
diff -u -p -r1.253 cpplex.c
--- cpplex.c	18 Feb 2004 22:02:38 -0000	1.253
+++ cpplex.c	15 Mar 2004 06:10:11 -0000
@@ -270,12 +270,12 @@ _cpp_process_line_notes (cpp_reader *pfi
       if (note->type == '\\' || note->type == ' ')
 	{
 	  if (note->type == ' ' && !in_comment)
-	    cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line, col,
+	    cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
 				 "backslash and newline separated by space");
 
 	  if (buffer->next_line > buffer->rlimit)
 	    {
-	      cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line, col,
+	      cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, col,
 				   "backslash-newline at end of file");
 	      /* Prevent "no newline at end of file" warning.  */
 	      buffer->next_line = buffer->rlimit;
@@ -290,14 +290,14 @@ _cpp_process_line_notes (cpp_reader *pfi
 	      && (!in_comment || warn_in_comment (pfile, note)))
 	    {
 	      if (CPP_OPTION (pfile, trigraphs))
-		cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line, col,
+		cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
 				     "trigraph ??%c converted to %c",
 				     note->type,
 				     (int) _cpp_trigraph_map[note->type]);
 	      else
 		{
 		  cpp_error_with_line 
-		    (pfile, CPP_DL_WARNING, pfile->line, col,
+		    (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
 		     "trigraph ??%c ignored, use -trigraphs to enable",
 		     note->type);
 		}
@@ -343,7 +343,7 @@ _cpp_skip_block_comment (cpp_reader *pfi
 	    {
 	      buffer->cur = cur;
 	      cpp_error_with_line (pfile, CPP_DL_WARNING,
-				   pfile->line, CPP_BUF_COL (buffer),
+				   pfile->line_table->highest_line, CPP_BUF_COL (buffer),
 				   "\"/*\" within comment");
 	    }
 	}
@@ -375,13 +375,13 @@ static int
 skip_line_comment (cpp_reader *pfile)
 {
   cpp_buffer *buffer = pfile->buffer;
-  unsigned int orig_line = pfile->line;
+  unsigned int orig_line = pfile->line_table->highest_line;
 
   while (*buffer->cur != '\n')
     buffer->cur++;
 
   _cpp_process_line_notes (pfile, true);
-  return orig_line != pfile->line;
+  return orig_line != pfile->line_table->highest_line;
 }
 
 /* Skips whitespace, saving the next non-whitespace character.  */
@@ -400,7 +400,7 @@ skip_whitespace (cpp_reader *pfile, cppc
       else if (c == '\0')
 	saw_NUL = true;
       else if (pfile->state.in_directive && CPP_PEDANTIC (pfile))
-	cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line,
+	cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
 			     CPP_BUF_COL (buffer),
 			     "%s in preprocessing directive",
 			     c == '\f' ? "form feed" : "vertical tab");
@@ -777,7 +777,7 @@ _cpp_get_fresh_line (cpp_reader *pfile)
 	{
 	  /* Only warn once.  */
 	  buffer->next_line = buffer->rlimit;
-	  cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line,
+	  cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
 			       CPP_BUF_COLUMN (buffer, buffer->cur),
 			       "no newline at end of file");
 	}
@@ -828,7 +828,7 @@ _cpp_lex_direct (cpp_reader *pfile)
 	  if (!pfile->state.in_directive)
 	    {
 	      /* Tell the compiler the line number of the EOF token.  */
-	      result->src_loc = pfile->line;
+	      result->src_loc = pfile->line_table->highest_line;
 	      result->flags = BOL;
 	    }
 	  return result;
@@ -845,19 +845,19 @@ _cpp_lex_direct (cpp_reader *pfile)
     }
   buffer = pfile->buffer;
  update_tokens_line:
-  result->src_loc = pfile->line;
+  result->src_loc = pfile->line_table->highest_line;
 
  skipped_white:
   if (buffer->cur >= buffer->notes[buffer->cur_note].pos
       && !pfile->overlaid_buffer)
     {
       _cpp_process_line_notes (pfile, false);
-      result->src_loc = pfile->line;
+      result->src_loc = pfile->line_table->highest_line;
     }
   c = *buffer->cur++;
 
-  result->src_loc = linemap_position_for_column (pfile->line_table,
-						 CPP_BUF_COLUMN (buffer, buffer->cur));
+  LINEMAP_POSITION_FOR_COLUMN (result->src_loc, pfile->line_table,
+			       CPP_BUF_COLUMN (buffer, buffer->cur));
 
   switch (c)
     {
Index: cppmacro.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppmacro.c,v
retrieving revision 1.146
diff -u -p -r1.146 cppmacro.c
--- cppmacro.c	19 Feb 2004 22:18:50 -0000	1.146
+++ cppmacro.c	15 Mar 2004 06:10:12 -0000
@@ -133,7 +133,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
 	unsigned int len;
 	const char *name;
 	uchar *buf;
-	map = linemap_lookup (pfile->line_table, pfile->line);
+	map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
 
 	if (node->value.builtin == BT_BASE_FILE)
 	  while (! MAIN_FILE_P (map))
@@ -158,12 +158,12 @@ _cpp_builtin_macro_text (cpp_reader *pfi
       break;
 
     case BT_SPECLINE:
-      map = linemap_lookup (pfile->line_table, pfile->line);
+      map = &pfile->line_table->maps[pfile->line_table->used-1];
       /* If __LINE__ is embedded in a macro, it must expand to the
 	 line of the macro's invocation, not its definition.
 	 Otherwise things like assert() will not work properly.  */
       if (CPP_OPTION (pfile, traditional))
-	number = pfile->line;
+	number = pfile->line_table->highest_line;
       else
 	number = pfile->cur_token[-1].src_loc;
       number = SOURCE_LINE (map, number);
Index: cpppch.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpppch.c,v
retrieving revision 1.14
diff -u -p -r1.14 cpppch.c
--- cpppch.c	17 Jan 2004 00:37:42 -0000	1.14
+++ cpppch.c	15 Mar 2004 06:10:12 -0000
@@ -618,7 +618,6 @@ cpp_read_state (cpp_reader *r, const cha
   struct lexer_state old_state;
   struct save_macro_item *d;
   size_t i, mac_count;
-  int saved_line = r->line;
 
   /* Restore spec_nodes, which will be full of references to the old 
      hashtable entries and so will now be invalid.  */
@@ -707,7 +706,6 @@ cpp_read_state (cpp_reader *r, const cha
     }
 
   r->state = old_state;
-  r->line = saved_line;
   free (defn);
   defn = NULL;
 
Index: cpptrad.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpptrad.c,v
retrieving revision 1.43
diff -u -p -r1.43 cpptrad.c
--- cpptrad.c	11 Feb 2004 15:29:30 -0000	1.43
+++ cpptrad.c	15 Mar 2004 06:10:12 -0000
@@ -148,7 +148,7 @@ static const uchar *
 copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
 {
   bool unterminated, copy = false;
-  source_location src_loc = pfile->line;
+  source_location src_loc = pfile->line_table->highest_line;
   cpp_buffer *buffer = pfile->buffer;
 
   buffer->cur = cur;
@@ -271,7 +271,6 @@ _cpp_overlay_buffer (cpp_reader *pfile, 
   pfile->saved_cur = buffer->cur;
   pfile->saved_rlimit = buffer->rlimit;
   pfile->saved_line_base = buffer->next_line;
-  pfile->saved_line = pfile->line;
   buffer->need_line = false;
 
   buffer->cur = start;
@@ -360,7 +359,7 @@ _cpp_scan_out_logical_line (cpp_reader *
   CUR (pfile->context) = pfile->buffer->cur;
   RLIMIT (pfile->context) = pfile->buffer->rlimit;
   pfile->out.cur = pfile->out.base;
-  pfile->out.first_line = pfile->line;
+  pfile->out.first_line = pfile->line_table->highest_line;
   /* start_of_input_line is needed to make sure that directives really,
      really start at the first character of the line.  */
   start_of_input_line = pfile->buffer->cur;
@@ -488,7 +487,7 @@ _cpp_scan_out_logical_line (cpp_reader *
 		    {
 		      maybe_start_funlike (pfile, node, out_start, &fmacro);
 		      lex_state = ls_fun_open;
-		      fmacro.line = pfile->line;
+		      fmacro.line = pfile->line_table->highest_line;
 		      continue;
 		    }
 		  else if (!recursive_macro (pfile, node))
Index: line-map.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/line-map.c,v
retrieving revision 1.20
diff -u -p -r1.20 line-map.c
--- line-map.c	16 Feb 2004 14:20:10 -0000	1.20
+++ line-map.c	15 Mar 2004 06:10:12 -0000
@@ -40,6 +40,7 @@ linemap_init (struct line_maps *set)
   set->depth = 0;
   set->cache = 0;
   set->highest_location = 0;
+  set->highest_line = 0;
   set->max_column_hint = 0;
 }
 
@@ -154,6 +155,7 @@ linemap_add (struct line_maps *set, enum
   set->cache = set->used++;
   map->column_bits = 0;
   set->highest_location = start_location;
+  set->highest_line = start_location;
   set->max_column_hint = 0;
 
   if (reason == LC_ENTER)
@@ -181,7 +183,7 @@ linemap_line_start (struct line_maps *se
   struct line_map *map = &set->maps[set->used - 1];
   source_location highest = set->highest_location;
   source_location r;
-  unsigned int last_line = SOURCE_LINE (map, highest);
+  unsigned int last_line = SOURCE_LINE (map, set->highest_line);
   int line_delta = to_line - last_line;
   bool add_map = false;
   if (line_delta < 0
@@ -196,7 +198,7 @@ linemap_line_start (struct line_maps *se
   if (add_map)
     {
       int column_bits;
-      if (max_column_hint > 1000000 || highest > 0xC0000000)
+      if (max_column_hint > 100000 || highest > 0xC0000000)
 	{
 	  max_column_hint = 0;
 	  if (highest >0xF0000000)
@@ -221,9 +223,33 @@ linemap_line_start (struct line_maps *se
   else
     r = highest - SOURCE_COLUMN (map, highest)
       + (line_delta << map->column_bits);
+  set->highest_line = r;
   if (r > set->highest_location)
     set->highest_location = r;
   set->max_column_hint = max_column_hint;
+  return r;
+}
+
+source_location
+linemap_position_for_column (struct line_maps *set, unsigned int to_column)
+{
+  source_location r = set->highest_line;
+  if (to_column >= set->max_column_hint)
+    {
+      if (r >= 0xC000000 || to_column > 100000)
+	{
+	  /* Running low on source_locations - disable column numbers.  */
+	  return r;
+	}
+      else
+	{
+	  struct line_map *map = &set->maps[set->used - 1];
+	  r = linemap_line_start (set, SOURCE_LINE (map, r), to_column + 50);
+	}
+    }
+  r = r + to_column;
+  if (r >= set->highest_location)
+    set->highest_location = r;
   return r;
 }
 
Index: line-map.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/line-map.h,v
retrieving revision 1.21
diff -u -p -r1.21 line-map.h
--- line-map.h	18 Feb 2004 22:02:38 -0000	1.21
+++ line-map.h	15 Mar 2004 06:10:12 -0000
@@ -84,6 +84,9 @@ struct line_maps
   /* Highest source_location "given out".  */
   source_location highest_location;
 
+  /* Start of line of highest source_location "given out".  */
+  source_location highest_line;
+
   /* The maximum column number we can quickly allocate.  Higher numbers
      may require allocating a new line_map.  */
   unsigned int max_column_hint;
@@ -157,32 +160,23 @@ extern void linemap_print_containing_fil
 /* Nonzero if the map is at the bottom of the include stack.  */
 #define MAIN_FILE_P(MAP) ((MAP)->included_from < 0)
 
-/* Get a source position that for the same line as the most recent
+/* Set LOC to a source position that is the same line as the most recent
    linemap_line_start, but with the specified TO_COLUMN column number.  */
 
-static inline source_location
-linemap_position_for_column (struct line_maps *set, unsigned int to_column)
-{
-  struct line_map *map = &set->maps[set->used - 1];
-  source_location r = set->highest_location;
-  if (__builtin_expect (to_column > set->max_column_hint, 0))
-    {
-      if (r >= 0xC000000 || to_column > 1000000) /* FIXME */
-	{
-	  /* Running low on source_locations - disable column numbers.  */
-	  return r - SOURCE_COLUMN (map, r);
-	}
-      else
-	{
-	  r = linemap_line_start (set, SOURCE_LINE (map, r), to_column + 50);
-	  map = &set->maps[set->used - 1];
-	  r = set->highest_location;
-	}
-    }
-  r = r - SOURCE_COLUMN (map, r) + to_column;
-  if (r >= set->highest_location)
-    set->highest_location = r;
-  return r;
-}
-						  
+#define LINEMAP_POSITION_FOR_COLUMN(LOC, SET, TO_COLUMN) { \
+  unsigned int to_column = (TO_COLUMN); \
+  struct line_maps *set = (SET); \
+  if (__builtin_expect (to_column >= set->max_column_hint, 0)) \
+    (LOC) = linemap_position_for_column (set, to_column); \
+  else { \
+    source_location r = set->highest_line; \
+    r = r + to_column; \
+    if (r >= set->highest_location) \
+      set->highest_location = r; \
+    (LOC) = r;			 \
+  }}
+    
+
+extern source_location
+linemap_position_for_column (struct line_maps *set, unsigned int to_column);
 #endif /* !GCC_LINE_MAP_H  */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]