diff options
author | Nathan Sidwell <nathan@acm.org> | 2018-10-11 12:42:37 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2018-10-11 12:42:37 +0000 |
commit | c1b48b29294ed58e72129db4db42adab3d0d1a9a (patch) | |
tree | 32a29d7459eecd3699a84f59acf2073799e71dbc /libcpp/line-map.c | |
parent | c7790bdbd97889b39fde3e0249b398a9bf5fb43b (diff) | |
download | gcc-c1b48b29294ed58e72129db4db42adab3d0d1a9a.zip gcc-c1b48b29294ed58e72129db4db42adab3d0d1a9a.tar.gz gcc-c1b48b29294ed58e72129db4db42adab3d0d1a9a.tar.bz2 |
[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
Diffstat (limited to 'libcpp/line-map.c')
-rw-r--r-- | libcpp/line-map.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 73d9444..66d92cf 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -612,30 +612,24 @@ const line_map_macro * linemap_enter_macro (struct line_maps *set, struct cpp_hashnode *macro_node, source_location expansion, unsigned int num_tokens) { - line_map_macro *map; - source_location start_location; - /* 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; + source_location start_location + = LINEMAPS_MACRO_LOWEST_LOCATION (set) - num_tokens; if (start_location < LINE_MAP_MAX_LOCATION) /* We ran out of macro map space. */ 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->n_tokens = num_tokens; map->macro_locations - = (source_location*) reallocator (NULL, - 2 * num_tokens - * sizeof (source_location)); + = (source_location*) set->reallocator (NULL, + 2 * num_tokens + * sizeof (source_location)); map->expansion = expansion; 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; |