diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2024-08-22 21:09:47 +0300 |
---|---|---|
committer | Alexander Monakov <amonakov@ispras.ru> | 2024-08-23 14:09:51 +0300 |
commit | b2c1d7c4573d3b938f44b3bda202adeb292b1cbc (patch) | |
tree | eb1f8c32ea2513a47d9eafc5ab0d316c7507db81 /libcpp | |
parent | 96fe95bac67c7303dc811c04f5e99cc959a7182a (diff) | |
download | gcc-b2c1d7c4573d3b938f44b3bda202adeb292b1cbc.zip gcc-b2c1d7c4573d3b938f44b3bda202adeb292b1cbc.tar.gz gcc-b2c1d7c4573d3b938f44b3bda202adeb292b1cbc.tar.bz2 |
libcpp: bump padding size in _cpp_convert_input [PR116458]
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.
libcpp/ChangeLog:
PR preprocessor/116458
* charset.cc (_cpp_convert_input): Bump padding to 64 if
HAVE_SSSE3.
Diffstat (limited to 'libcpp')
-rw-r--r-- | libcpp/charset.cc | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/libcpp/charset.cc b/libcpp/charset.cc index d58319a..7907287 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 |