https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65536
--- Comment #9 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #2)
> if (file_change)
> {
> if (prev_file)
> linemap_add (line_table, LC_LEAVE, false, NULL, 0);
>
> linemap_add (line_table, LC_ENTER, false, current_file, current_line);
> }
> else if (line_change)
> linemap_line_start (line_table, current_line, current_col);
>
> return linemap_position_for_column (line_table, current_col);
By the way, just doing
else if (line_change)
- linemap_line_start (line_table, current_line, current_col);
+ linemap_line_start (line_table, current_line, current_col + 1);
return linemap_position_for_column (line_table, current_col);
should reduce memory consumption (and perhaps speed) of the line_table by a
lot. You are basically saying: I need a map not bigger than current_col. Then
saying, give me a position for current_col, which triggers another map
allocation.
And my guess is that:
else if (line_change)
- linemap_line_start (line_table, current_line, current_col);
+ linemap_line_start (line_table, current_line, 81);
return linemap_position_for_column (line_table, current_col);
may reduce it even further if at least the file:line are mostly in order
(otherwise, the column number does not matter because you will create a new map
for every call to linemap_line_start).