[preprocessor/91991] column location overflow
authorNathan Sidwell <nathan@acm.org>
Fri, 4 Oct 2019 19:08:09 +0000 (19:08 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 4 Oct 2019 19:08:09 +0000 (19:08 +0000)
https://gcc.gnu.org/ml/gcc-patches/2019-10/msg00371.html
PR preprocessor/91991
* line-map.c (linemap_line_start): Clear max_column_hint if we run
out of locations.

From-SVN: r276596

libcpp/ChangeLog
libcpp/line-map.c

index e13ff1dbf1b856a4e22360f3b25fe84fe4a4c5a2..f3237fbd38f2d97757adcd29e48d9c0ceb0f5fc1 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-04  Nathan Sidwell  <nathan@acm.org>
+
+       PR preprocessor/91991
+       * line-map.c (linemap_line_start): Clear max_column_hint if we run
+       out of locations.
+
 2019-10-02  Richard Biener  <rguenther@suse.de>
 
        * internal.h (enum include_type): Remove trailing comma.
index d6924eb3e78689e73799c3c36e3a9e778869143f..feeb74808768c8e86082e0a0b19f37e01ee95310 100644 (file)
@@ -717,11 +717,11 @@ linemap_line_start (line_maps *set, linenum_type to_line,
          /* If the column number is ridiculous or we've allocated a huge
             number of location_ts, give up on column numbers
             (and on packed ranges).  */
-         max_column_hint = 0;
+         max_column_hint = 1;
          column_bits = 0;
          range_bits = 0;
          if (highest >= LINE_MAP_MAX_LOCATION)
-           return 0;
+           goto overflowed;
        }
       else
        {
@@ -735,6 +735,7 @@ linemap_line_start (line_maps *set, linenum_type to_line,
          max_column_hint = 1U << column_bits;
          column_bits += range_bits;
        }
+
       /* Allocate the new line_map.  However, if the current map only has a
         single line we can sometimes just increase its column_bits instead. */
       if (line_delta < 0
@@ -765,8 +766,11 @@ linemap_line_start (line_maps *set, linenum_type to_line,
      macro tokens.  */
   if (r >= LINE_MAP_MAX_LOCATION)
     {
+    overflowed:
       /* Remember we overflowed.  */
       set->highest_line = set->highest_location = LINE_MAP_MAX_LOCATION - 1;
+      /* No column numbers!  */
+      set->max_column_hint = 1;
       return 0;
     }