[PATCH] preprocessor: Fix ICE with too long line in fmtwarn [PR96935]

Marek Polacek polacek@redhat.com
Wed Sep 16 19:44:49 GMT 2020


On Wed, Sep 16, 2020 at 03:15:19PM -0400, David Malcolm via Gcc-patches wrote:
> On Wed, 2020-09-16 at 11:16 -0400, Marek Polacek wrote:
> > Here we ICE in char_span::subspan because the offset it gets is -1.
> > It's -1 because get_substring_ranges_for_loc gets a location whose
> > column was 0.  That only happens in testcases like the attached where
> > we're dealing with extremely long lines (at least 4065 chars it
> > seems).
> > This does happen in practice, though, so it's not just a theoretical
> > problem (e.g. when building the SU2 suite).
> > 
> > Fixed by checking that the column get_substring_ranges_for_loc gets
> > is
> > sane, akin to other checks in that function.
> > 
> > Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/10?
> 
> [...]
> 
> Thanks for the patch.
> 
> > index d573b90341a..ea3d4f34220 100644
> > --- a/gcc/input.c
> > +++ b/gcc/input.c
> > @@ -1461,6 +1461,8 @@ get_substring_ranges_for_loc (cpp_reader
> > *pfile,
> >        size_t literal_length = finish.column - start.column + 1;
> >  
> >        /* Ensure that we don't crash if we got the wrong
> > location.  */
> > +      if (start.column < 1)
> > +	return "line is too long";
> 
> Nit: I believe this could also happen for very large source files when
> locations exceed LINE_MAP_MAX_LOCATION_WITH_COLS.
> 
> So the error message should read "zero start column", or even just
> "start.column < 1" I think.  (if we have a negative column number then
> something has gone badly wrong; not sure if that's expressible via
> #line directives)
> 
> OK with that change.
> Dave

Thanks for the quick review, pushed with the "zero start column" change.

Marek



More information about the Gcc-patches mailing list