aboutsummaryrefslogtreecommitdiff
path: root/libcpp/line-map.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp/line-map.c')
-rw-r--r--libcpp/line-map.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index 1bf0e82..2f5e444 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -981,16 +981,15 @@ linemap_position_for_loc_and_offset (line_maps *set,
(loc + offset) should be less than the first location encoded by
the next line map of the set. Otherwise, we try to encode the
location in the next map. */
- while (map != LINEMAPS_LAST_ORDINARY_MAP (set)
- && (loc + (column_offset << map->m_range_bits)
- >= MAP_START_LOCATION (&map[1])))
- {
- map = &map[1];
- /* If the next map starts in a higher line, we cannot encode the
- location there. */
- if (line < ORDINARY_MAP_STARTING_LINE_NUMBER (map))
- return loc;
- }
+ for (; map != LINEMAPS_LAST_ORDINARY_MAP (set)
+ && (loc + (column << map->m_range_bits)
+ >= MAP_START_LOCATION (map + 1)); map++)
+ /* If the next map is a different file, or starts in a higher line, we
+ cannot encode the location there. */
+ if ((map + 1)->reason != LC_RENAME
+ || line < ORDINARY_MAP_STARTING_LINE_NUMBER (map + 1)
+ || 0 != strcmp (LINEMAP_FILE (map + 1), LINEMAP_FILE (map)))
+ return loc;
column += column_offset;