[PATCH] A couple of line map fixes
https://gcc.gnu.org/ml/gcc-patches/2018-10/msg00623.html * include/line-map.h (LINEMAPS_MACRO_LOWEST_LOCATION): Fix off-by-one error. * line-map.c (linemap_enter_macro): Use RAII. Clear all of the macro_locations. From-SVN: r265037
This commit is contained in:
parent
c7790bdbd9
commit
c1b48b2929
|
@ -1,3 +1,10 @@
|
||||||
|
2018-10-11 Nathan Sidwell <nathan@acm.org>
|
||||||
|
|
||||||
|
* include/line-map.h (LINEMAPS_MACRO_LOWEST_LOCATION): Fix
|
||||||
|
off-by-one error.
|
||||||
|
* line-map.c (linemap_enter_macro): Use RAII. Clear all of the
|
||||||
|
macro_locations.
|
||||||
|
|
||||||
2018-10-09 David Malcolm <dmalcolm@redhat.com>
|
2018-10-09 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* charset.c (noop_error_cb): Rename to...
|
* charset.c (noop_error_cb): Rename to...
|
||||||
|
|
|
@ -1017,7 +1017,7 @@ LINEMAPS_MACRO_LOWEST_LOCATION (const line_maps *set)
|
||||||
{
|
{
|
||||||
return LINEMAPS_MACRO_USED (set)
|
return LINEMAPS_MACRO_USED (set)
|
||||||
? MAP_START_LOCATION (LINEMAPS_LAST_MACRO_MAP (set))
|
? MAP_START_LOCATION (LINEMAPS_LAST_MACRO_MAP (set))
|
||||||
: MAX_SOURCE_LOCATION;
|
: MAX_SOURCE_LOCATION + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the last macro map allocated in the line table SET. */
|
/* Returns the last macro map allocated in the line table SET. */
|
||||||
|
|
|
@ -612,30 +612,24 @@ const line_map_macro *
|
||||||
linemap_enter_macro (struct line_maps *set, struct cpp_hashnode *macro_node,
|
linemap_enter_macro (struct line_maps *set, struct cpp_hashnode *macro_node,
|
||||||
source_location expansion, unsigned int num_tokens)
|
source_location expansion, unsigned int num_tokens)
|
||||||
{
|
{
|
||||||
line_map_macro *map;
|
source_location start_location
|
||||||
source_location start_location;
|
= LINEMAPS_MACRO_LOWEST_LOCATION (set) - num_tokens;
|
||||||
/* Cast away extern "C" from the type of xrealloc. */
|
|
||||||
line_map_realloc reallocator = (set->reallocator
|
|
||||||
? set->reallocator
|
|
||||||
: (line_map_realloc) xrealloc);
|
|
||||||
|
|
||||||
start_location = LINEMAPS_MACRO_LOWEST_LOCATION (set) - num_tokens;
|
|
||||||
|
|
||||||
if (start_location < LINE_MAP_MAX_LOCATION)
|
if (start_location < LINE_MAP_MAX_LOCATION)
|
||||||
/* We ran out of macro map space. */
|
/* We ran out of macro map space. */
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
map = linemap_check_macro (new_linemap (set, start_location));
|
line_map_macro *map = linemap_check_macro (new_linemap (set, start_location));
|
||||||
|
|
||||||
map->macro = macro_node;
|
map->macro = macro_node;
|
||||||
map->n_tokens = num_tokens;
|
map->n_tokens = num_tokens;
|
||||||
map->macro_locations
|
map->macro_locations
|
||||||
= (source_location*) reallocator (NULL,
|
= (source_location*) set->reallocator (NULL,
|
||||||
2 * num_tokens
|
2 * num_tokens
|
||||||
* sizeof (source_location));
|
* sizeof (source_location));
|
||||||
map->expansion = expansion;
|
map->expansion = expansion;
|
||||||
memset (MACRO_MAP_LOCATIONS (map), 0,
|
memset (MACRO_MAP_LOCATIONS (map), 0,
|
||||||
num_tokens * sizeof (source_location));
|
2 * num_tokens * sizeof (source_location));
|
||||||
|
|
||||||
LINEMAPS_MACRO_CACHE (set) = LINEMAPS_MACRO_USED (set) - 1;
|
LINEMAPS_MACRO_CACHE (set) = LINEMAPS_MACRO_USED (set) - 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue