Commit c1fc5047 by Per Bothner Committed by Per Bothner

re PR preprocessor/20907 (long comments throw off line numbers)


	PR preprocessor/20907
	* line-map.c (linemap_line_start): Fix bug when we need to increse
	column_bits but can re-use the current line_map.

From-SVN: r98515
parent 1c280337
2005-04-19 Per Bothner <per@bothner.com>
PR preprocessor/20907
* line-map.c (linemap_line_start): Fix bug when we need to increse
column_bits but can re-use the current line_map.
2005-04-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2005-04-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* system.h (fopen, fdopen, freopen): Define these to the unlocked * system.h (fopen, fdopen, freopen): Define these to the unlocked
......
...@@ -199,6 +199,8 @@ linemap_line_start (struct line_maps *set, unsigned int to_line, ...@@ -199,6 +199,8 @@ linemap_line_start (struct line_maps *set, unsigned int to_line,
int column_bits; int column_bits;
if (max_column_hint > 100000 || highest > 0xC0000000) if (max_column_hint > 100000 || highest > 0xC0000000)
{ {
/* If the column number is ridiculous or we've allocated a huge
number of source_locations, give up on column numbers. */
max_column_hint = 0; max_column_hint = 0;
if (highest >0xF0000000) if (highest >0xF0000000)
return 0; return 0;
...@@ -211,13 +213,15 @@ linemap_line_start (struct line_maps *set, unsigned int to_line, ...@@ -211,13 +213,15 @@ linemap_line_start (struct line_maps *set, unsigned int to_line,
column_bits++; column_bits++;
max_column_hint = 1U << column_bits; max_column_hint = 1U << column_bits;
} }
/* Allocate the new line_map. However, if the current map only has a
single line we can sometimes just increase its column_bits instead. */
if (line_delta < 0 if (line_delta < 0
|| last_line != map->to_line || last_line != map->to_line
|| SOURCE_COLUMN (map, highest) >= (1U << column_bits)) || SOURCE_COLUMN (map, highest) >= (1U << column_bits))
map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp, map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp,
map->to_file, to_line); map->to_file, to_line);
map->column_bits = column_bits; map->column_bits = column_bits;
r = map->start_location; r = map->start_location + ((to_line - map->to_line) << column_bits);
} }
else else
r = highest - SOURCE_COLUMN (map, highest) r = highest - SOURCE_COLUMN (map, highest)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment