Hi Dodji,

On 23 October 2014 at 13:11, Dodji Seketeli <do...@redhat.com> wrote:
>     /* If MAP is not the last line map of its set, then the new location
>        (loc + offset) should be less than the first location encoded by
>        the next line map of the set.  */

which is currently implemented as:

if (map != LINEMAPS_LAST_ORDINARY_MAP (set))
    linemap_assert (loc + offset < MAP_START_LOCATION (&map[1]));

However, this can easily trigger in Fortran, for example, when adding
one line adds a new map, the location of the new map is 1 +
set->highest_location. If the highest_location corresponds to the
start of the previous line (because Fortran does not actually track
columns yet with line-maps) then any offset will trigger this.

One solution could be to make the new map's start location =
set->highest_location + set->max_column_hint, but I'm not sure if
there is a more conservative approach.

I'm going to propose a patch that changes the asserts to assert only
if checking otherwise return loc unchanged. That seems safer than
giving a wildly inaccurate location.

Cheers,

Manuel.

Reply via email to