On Thu, Aug 22, 2024 at 8:25 PM Alexander Monakov <amona...@ispras.ru> wrote:
>
> The recently introduced search_line_fast_ssse3 raised padding
> requirement from 16 to 64, which was adjusted in read_file_guts,
> but the corresponding ' + 16' in _cpp_convert_input was overlooked.

OK

> libcpp/ChangeLog:
>
>         PR preprocessor/116458
>         * charset.cc (_cpp_convert_input): Bump padding to 64 if
>         HAVE_SSSE3.
> ---
>  libcpp/charset.cc | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/libcpp/charset.cc b/libcpp/charset.cc
> index d58319a500..79072877cb 100644
> --- a/libcpp/charset.cc
> +++ b/libcpp/charset.cc
> @@ -3093,6 +3093,7 @@ _cpp_convert_input (cpp_reader *pfile, const char 
> *input_charset,
>    struct cset_converter input_cset;
>    struct _cpp_strbuf to;
>    unsigned char *buffer;
> +  size_t pad;
>
>    input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset);
>    if (input_cset.func == convert_no_conversion)
> @@ -3129,16 +3130,18 @@ _cpp_convert_input (cpp_reader *pfile, const char 
> *input_charset,
>         }
>      }
>
> +#ifdef HAVE_SSSE3
> +  pad = 64;
> +#else
> +  pad = 16;
> +#endif
>    /* Resize buffer if we allocated substantially too much, or if we
> -     haven't enough space for the \n-terminator or following
> -     15 bytes of padding (used to quiet warnings from valgrind or
> -     Address Sanitizer, when the optimized lexer accesses aligned
> -     16-byte memory chunks, including the bytes after the malloced,
> -     area, and stops lexing on '\n').  */
> -  if (to.len + 4096 < to.asize || to.len + 16 > to.asize)
> -    to.text = XRESIZEVEC (uchar, to.text, to.len + 16);
> -
> -  memset (to.text + to.len, '\0', 16);
> +     don't have enough space for the following padding, which allows
> +     search_line_fast to use (possibly misaligned) vector loads.  */
> +  if (to.len + 4096 < to.asize || to.len + pad > to.asize)
> +    to.text = XRESIZEVEC (uchar, to.text, to.len + pad);
> +
> +  memset (to.text + to.len, '\0', pad);
>
>    /* If the file is using old-school Mac line endings (\r only),
>       terminate with another \r, not an \n, so that we do not mistake
> --
> 2.46.0
>

Reply via email to