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--;
>  
> 

Reply via email to