Hi, you may want to Cc Lewis Hyatt on such patches (adding him now), I didn't touch this area.
Alexander On Mon, 17 Feb 2025, yash.shi...@windriver.com wrote: > From: Yash Shinde <yash.shi...@windriver.com> > > This patch addresses an issue in the C preprocessor where incorrect line > number information is generated when processing > files with a large number of lines. The problem arises from improper handling > of location intervals in the line map, > particularly when locations exceed LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES. > > By ensuring that the highest location is not decremented if it would move to > a different ordinary map, this fix resolves > the line number discrepancies observed in certain test cases. This change > improves the accuracy of line number reporting, > benefiting users relying on precise code coverage and debugging information. > > Signed-off-by: Jeremy Bettis <jbet...@google.com> > Signed-off-by: Yash Shinde <yash.shi...@windriver.com> > --- > libcpp/files.cc | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/libcpp/files.cc b/libcpp/files.cc > index 1ed19c5555a..3e6ca119ad5 100644 > --- a/libcpp/files.cc > +++ b/libcpp/files.cc > @@ -1046,6 +1046,14 @@ _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, > include_type type, > && type < IT_DIRECTIVE_HWM > && (pfile->line_table->highest_location > != LINE_MAP_MAX_LOCATION - 1)); > + > + if (decrement && LINEMAPS_ORDINARY_USED (pfile->line_table)) > + { > + const line_map_ordinary *map = LINEMAPS_LAST_ORDINARY_MAP > (pfile->line_table); > + if (map && map->start_location == pfile->line_table->highest_location) > + decrement = false; > + } > + > if (decrement) > pfile->line_table->highest_location--; > >