[PATCH] A couple of line map fixes
authorNathan Sidwell <nathan@acm.org>
Thu, 11 Oct 2018 12:42:37 +0000 (12:42 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 11 Oct 2018 12:42:37 +0000 (12:42 +0000)
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

libcpp/ChangeLog
libcpp/include/line-map.h
libcpp/line-map.c

index 66811015aa980989ae8b0abee5777c8b43c81ce9..fe0dc8ddfe5e9bf4a0b7098220ac968d0d954169 100644 (file)
@@ -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>
 
        * charset.c (noop_error_cb): Rename to...
index c479dfa2b3ce4c11097bb45f61980b6e1b470ae8..23f0e4a3514348bce0656706450c4fe7a6bf76af 100644 (file)
@@ -1017,7 +1017,7 @@ LINEMAPS_MACRO_LOWEST_LOCATION (const line_maps *set)
 {
   return LINEMAPS_MACRO_USED (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.  */
index 73d94443090004ebba1cda5fcab42ef5ca652d3d..66d92cf34aa2ccac522391f5863a8b05b38fae70 100644 (file)
@@ -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;