mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 08:10:28 +08:00
line-map.h (linemap_assert_fails): Declare.
libcpp/ChangeLog: 2014-12-02 Manuel López-Ibáñez <manu@gcc.gnu.org> * include/line-map.h (linemap_assert_fails): Declare. * line-map.c (linemap_position_for_loc_and_offset): Use it. From-SVN: r218277
This commit is contained in:
parent
9c320ab1f1
commit
73bd83290a
@ -1,3 +1,8 @@
|
||||
2014-12-02 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
* include/line-map.h (linemap_assert_fails): Declare.
|
||||
* line-map.c (linemap_position_for_loc_and_offset): Use it.
|
||||
|
||||
2014-12-02 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
* line-map.c (linemap_add): Fix typo.
|
||||
|
@ -579,6 +579,16 @@ bool linemap_location_from_macro_expansion_p (const struct line_maps *,
|
||||
if (! (EXPR)) \
|
||||
abort (); \
|
||||
} while (0)
|
||||
|
||||
/* Assert that becomes a conditional expression when checking is disabled at
|
||||
compilation time. Use this for conditions that should not happen but if
|
||||
they happen, it is better to handle them gracefully rather than crash
|
||||
randomly later.
|
||||
Usage:
|
||||
|
||||
if (linemap_assert_fails(EXPR)) handle_error(); */
|
||||
#define linemap_assert_fails(EXPR) __extension__ \
|
||||
({linemap_assert (EXPR); false;})
|
||||
|
||||
/* Assert that MAP encodes locations of tokens that are not part of
|
||||
the replacement-list of a macro expansion. */
|
||||
@ -588,6 +598,7 @@ bool linemap_location_from_macro_expansion_p (const struct line_maps *,
|
||||
#else
|
||||
/* Include EXPR, so that unused variable warnings do not occur. */
|
||||
#define linemap_assert(EXPR) ((void)(0 && (EXPR)))
|
||||
#define linemap_assert_fails(EXPR) (! (EXPR))
|
||||
#define linemap_check_ordinary(LINE_MAP) (LINE_MAP)
|
||||
#endif
|
||||
|
||||
|
@ -645,7 +645,9 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
|
||||
const struct line_map * map = NULL;
|
||||
|
||||
/* This function does not support virtual locations yet. */
|
||||
linemap_assert (!linemap_location_from_macro_expansion_p (set, loc));
|
||||
if (linemap_assert_fails
|
||||
(!linemap_location_from_macro_expansion_p (set, loc)))
|
||||
return loc;
|
||||
|
||||
if (offset == 0
|
||||
/* Adding an offset to a reserved location (like
|
||||
@ -658,22 +660,27 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
|
||||
loc = linemap_resolve_location (set, loc, LRK_SPELLING_LOCATION, &map);
|
||||
/* The new location (loc + offset) should be higher than the first
|
||||
location encoded by MAP. */
|
||||
linemap_assert (MAP_START_LOCATION (map) < loc + offset);
|
||||
if (linemap_assert_fails (MAP_START_LOCATION (map) < loc + offset))
|
||||
return loc;
|
||||
|
||||
/* 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. */
|
||||
if (map != LINEMAPS_LAST_ORDINARY_MAP (set))
|
||||
linemap_assert (loc + offset < MAP_START_LOCATION (&map[1]));
|
||||
if (linemap_assert_fails (loc + offset < MAP_START_LOCATION (&map[1])))
|
||||
return loc;
|
||||
|
||||
offset += SOURCE_COLUMN (map, loc);
|
||||
linemap_assert (offset < (1u << map->d.ordinary.column_bits));
|
||||
if (linemap_assert_fails (offset < (1u << map->d.ordinary.column_bits)))
|
||||
return loc;
|
||||
|
||||
source_location r =
|
||||
linemap_position_for_line_and_column (map,
|
||||
SOURCE_LINE (map, loc),
|
||||
offset);
|
||||
linemap_assert (map == linemap_lookup (set, r));
|
||||
if (linemap_assert_fails (map == linemap_lookup (set, r)))
|
||||
return loc;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user